2012-11-16 14 views
5

Sono arrivato a un vicolo cieco mentre cercavo di implementare un semplice calendario. Ecco schema della tabella miei settimane:implementazione di un semplice calendario

DROP TABLE IF EXISTS `weeks`; 
CREATE TABLE `weeks` (
    `weeknum` varchar(255) NOT NULL DEFAULT '', 
    `period1` varchar(255) DEFAULT NULL, 
    `period2` varchar(255) DEFAULT NULL, 
    `A11` varchar(255) DEFAULT NULL, 
    `A22` varchar(255) DEFAULT NULL, 
    `A31` varchar(255) DEFAULT NULL, 
    `A32` varchar(255) DEFAULT NULL, 
    `C11` varchar(255) DEFAULT NULL, 
    `C12` varchar(255) DEFAULT NULL, 
    `C21` varchar(255) DEFAULT NULL, 
    `C22` varchar(255) DEFAULT NULL, 
    `C31` varchar(255) DEFAULT NULL, 
    `C32` varchar(255) DEFAULT NULL, 
    `D11` varchar(255) DEFAULT NULL, 
    `D12` varchar(255) DEFAULT NULL, 
    `D21` varchar(255) DEFAULT NULL, 
    `D22` varchar(255) DEFAULT NULL, 
    `D31` varchar(255) DEFAULT NULL, 
    `D32` varchar(255) DEFAULT NULL, 
    `E11` varchar(255) DEFAULT NULL, 
    `E12` varchar(255) DEFAULT NULL, 
    `E21` varchar(255) DEFAULT NULL, 
    `E22` varchar(255) DEFAULT NULL, 
    `E31` varchar(255) DEFAULT NULL, 
    `E32` varchar(255) DEFAULT NULL, 
    PRIMARY KEY (`weeknum`) 
) ENGINE=InnoDB DEFAULT CHARSET=greek; 

nomi di colonna sono numeri in camera e il WEEKNUM prende i valori da 15 a 45. dopo l'esecuzione di una query che contiene il WEEKNUM (ad esempio 40) come argomento, ho un po ' numeri di stanza (E31, E32 ecc.). Voglio solo impostare il valore della cella su "sì" per la riga e la colonna appropriate, a seconda del risultato della query. Per esempio: dopo aver eseguito

select room.roomnum 
from payment,contract,room,customer 
where payment.contractID = contract.contractID 
and contract.roomID=room.roomID 
and customer.customerID=payment.customerID 
and payment.yearkoino='2009' and contract.weeknum=40 

ottengo:

+---------+ 
| roomnum | 
+---------+ 
| c21 | 
| a32 | 
| c12 | 
| d12 | 
| d11 | 
| e22 | 
| a22 | 
| c31 | 
| e12 | 
+---------+ 

questo è anche uno screenshot che potrebbe dare un'idea di quello che sto cercando di fare:

http://img37.imageshack.us/img37/7633/screenshotoy.png

Qualsiasi aiuto sarebbe apprezzato.

+2

Ciao, e benvenuti a SO! Si prega di fare attenzione a formattare i tuoi messaggi in futuro. Questa volta l'ho fatto per te: dai un'occhiata alle differenze tra ciò che ho fatto e ciò che hai postato per prima facendo clic sul piccolo "modificato X minuti fa" sopra il mio nome per scoprire cosa ho fatto. =) –

+0

che potrebbe piacerti [Dateformat] (http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format) –

+1

anche io non ti suggerisco di impostare i numeri delle stanze come colonne –

risposta

1

In generale è meglio utilizzare la terza forma normale per questi tipi di attività.

Una tabella per Settimane, una per Camere, quindi una terza tabella che tiene traccia della relazione RoomWeek.

RoomWeek avrebbe un minimo di due campi - RoomNum, figlio di Room.RoomNum WEEKNUM, figlio di Week.WekNum Stato, tenere traccia "Sì/No", ecc altri campi, se necessario

prossimo passo sarebbe quello di popolare RoomWeek con un cross-join dai tavoli Room e Week per ottenere una riga per ogni possibilità.

Allora quando si dispone di una query che restituisce un elenco stanza per una data settimana, allora si dovrebbe fare qualcosa di simile

update RoomWeek, payment,contract,room,customer 
set RoomWeek.status = "Yes" 
where payment.contractID = contract.contractID 
and contract.roomID=room.roomID 
and customer.customerID=payment.customerID 
and payment.yearkoino='2009' and contract.weeknum=40 
and RoomWeek.weeknum = contract.weeknum 
and RoomWeek.Roomnum = room.roomnum 

Se si sta insistendo su aggiornare la tabella corrente allora la sua difficile bc la sua molto più difficile per aggiornare una tabella come Settimana quando la colonna che si desidera aggiornare dipende dai dati stessi (il roomnum restituito) - è possibile farlo ma se le camere cambiano, la tabella deve cambiare, il codice potrebbe dover cambiare ecc.

Problemi correlati