2012-11-16 92 views
5

我想出了一個死衚衕,而試圖實現一個簡單的日曆。 這是我的周表模式:實現一個簡單的日曆

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; 

列名是房間號碼和運行包含WEEKNUM查詢(例如40)作爲參數後的weeknum取值從15到45 ,我得到一些房間號碼(E31,E32等)。 我只是想設置單元格值「是」適當的行和列,根據查詢的結果。 例如:運行

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 

後,我得到:

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

這也是有可能給你什麼,我試圖做一個想法截圖:

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

任何幫助,將不勝感激。

+2

大家好,歡迎SO!請注意將來格式化您的帖子。我這次爲你做了這件事 - 通過點擊我名字上方的小編輯「X分鐘前」來了解我所做的和你最初發布的內容之間的差異,以瞭解我所做的事情。 =) –

+0

btw你可能會喜歡[日期格式](http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format) –

+1

也我不建議你將房間號碼設置爲collumns –

回答

1

一般來說它能夠更好地使用第三範式對於這些類型的任務。對於周

一個表,一個用於室,然後是第三表跟蹤的關係RoomWeek。

RoomWeek將至少有兩個領域 - RoomNum,Room.RoomNum WEEKNUM的孩子,Week.WekNum 狀態的孩子,跟蹤 「是/否」 等 等領域需要

下一個步驟是通過房間和周表的交叉連接填充RoomWeek,以獲得每行可能性的一行。

所以那麼當你有一個返回房間列表某一週的查詢,那麼你會做這樣的事情

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 

如果你堅持更新當前表那麼它的棘手BC它要困難得多更新像周表時要更新,然後列依賴於數據本身(roomnum返回) - 這是可以做到的,但如果房間的變化,你的表有改變,代碼可能需要改變等等。