2011-06-19 52 views
2

我試圖建立一個系統,它可以讓用戶保留一個項目,比方說一臺筆記本電腦..如何獲得可預訂的日期?

我的表看起來像這樣:

Table 'items' 
id int(20) PK auto_increment 
type int(20) FK(types.id) 
name varchar(200) 

Table 'types' 
id int(20) PK auto_increment 
name varchar(200) 

Table 'reservations' 
id int(20) PK auto_increment 
user int(20) FK(users.id) 
startDate datetime 
endDate datetime 

可以說我有1型(筆記本電腦)和3筆記本電腦都具有相同的規格,而用戶只想保留一個筆記本電腦。我將如何獲得所有可用日期只是一臺筆記本電腦?

我不介意這是怎麼達到,或者通過PHP或MySQL,我只打算在讓用戶與給定類型項目的..可用日期列表

+0

您可能需要在''reservations''表中添加'item',否則您將無法看到哪個項目被保留。 –

+0

是的,顯然是這樣,這不是問題。 – Sander

回答

3

如果您預訂的形式提示$開始和$結束日期/時間的預約,該查詢會告訴其筆記本電腦在整個由這兩個日期指定的期限可供選擇:

SELECT items.id, items.name 
FROM items 
LEFT JOIN types ON items.type = types.id 
LEFT JOIN reservations ON reservations.item_id = items.id 
WHERE (((reservations.endDate NOT between $start AND $end) and 
     (reservations.startDate NOT between $start AND $end)) or 
     (reservations.id IS NULL)) and 
     (types.id = $laptop_type_id) 

前兩個between條款會發現其開始任何筆記本電腦/結束日期不落在要求的開始/結束日期 - 例如它們是保留的,但在指定的時間範圍內可用。空檢查將查找任何未保留的筆記本電腦。 types.id檢查將搜索僅限於筆記本電腦。

+0

這並不完全符合我一直在尋找..儘管這是一個排序的體面的替代.. 我所想的是: 用戶告訴我們他想要一臺筆記本電腦,那麼他會在可用週期的列表在那裏他可以保留一臺筆記本電腦.. – Sander

+2

數據庫不能從無數據創建數據。您可以從一系列時段開始,並將它們標記爲正在使用(僅顯示可用的時段),也可以從使用時段列表開始,並排除不起作用的時段。 –

+0

有點害怕,好像我必須要處理它! – Sander