2012-11-16 8 views
5

Doszedłem do ślepego zaułka, próbując wdrożyć prosty kalendarz. To tabeli schematu moich tygodni:wdrażanie prostego kalendarza

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; 

Nazwy kolumn są liczbami pokojowej i WEEKNUM przyjmuje wartości od 15 do 45. po uruchomieniu kwerendy, która zawiera WEEKNUM (np 40) jako argument, mam pewne numery pokoi (E31, E32 itp.). Po prostu chcę ustawić wartość komórki na "tak" dla odpowiedniego wiersza i kolumny, w zależności od wyniku zapytania. Na przykład: po uruchomieniu

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 

uzyskać:

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

to również zrzut ekranu, który może dać wyobrażenie o tym, co próbuję zrobić:

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

Każda pomoc zostanie doceniona.

+2

Witam, witam w SO! Zadbaj o formatowanie swoich postów w przyszłości. Zrobiłem to za Ciebie tym razem - spójrz na różnice między tym, co zrobiłem, a tym, co po raz pierwszy opublikowałeś, klikając na małe "edytowane X min temu" powyżej mojego imienia, aby dowiedzieć się, co zrobiłem. =) –

+0

btw może Ci się spodobać [Dateformat] (http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format) –

+1

również nie sugeruję ci ustaw numery pokoi jako kolumny –

Odpowiedz

1

Ogólnie rzecz biorąc, lepiej jest użyć trzeciej normalnej formy dla tego typu zadań.

Jedna tabela dla tygodni, jedna dla pokoi, a następnie trzecia tabela, która śledzi relację RoomWeek.

RoomWeek musiałby co najmniej dwóch dziedzinach - RoomNum, dzieckiem Room.RoomNum WEEKNUM, dzieckiem Week.WekNum Statusu, utwór "Tak/Nie" itd innych dziedzinach, ile potrzeba

obok krokiem będzie wypełnienie RoomWeek krzyżowym połączeniem z Tabeli pokoju i tygodnia, aby uzyskać jeden wiersz dla każdej możliwości.

Więc wtedy gdy masz kwerendę, która zwraca listę pokój dla danego tygodnia wtedy byś zrobił coś

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 

Jeśli kładąc nacisk na aktualizację bieżącej tabeli następnie jego trudne bc jej znacznie trudniej aby zaktualizować tabelę taką jak Tydzień, gdy kolumna, którą chcesz zaktualizować, zależy od samych danych (powrócił roomnum) - można to zrobić, ale jeśli pokoje się zmienią, stolik musi się zmienić, kod może wymagać zmiany itp.