2012-08-01 74 views
0

我有一個項目表:itemID,itemName 每個項目可以預定一段​​時間;每個項目可以有多個預訂;預訂從不重疊。MySQL和PHP的方法來查詢

登記在一個預定表中保存:ITEMID,的startDate,結束日期

我想指定的天數,開始日期和結束日期,然後找到未結算週期這是天這個數字的任何物品或在提供的開始日期和結束日期之間不太長。換句話說,我正在尋找在給定日期範圍內的「短期可用性」項目。然後,我想要返回每個itemID的短期可用開始日期和結束日期列表。

我很感激任何關於如何去解決這個問題的建議,理想情況是在單個MySQL查詢中,但是使用PHP循環進行處理是很好的。

到目前爲止,我的方法是在預訂表中獲取所有唯一的itemID,並在預定的開始日期和結束日期之內或之間進行預訂,然後使用PHP和MySQL查詢的組合來解析整個範圍,以及將itemID和'short term period'的開始和結束日期添加到數組中,但這不是一種優雅的方法。

謝謝

+0

如果你剛剛入門,不會使用像[CodeIgnighter](http://codeigniter.com/)或[CakePHP](http://cakephp.org/)這樣的框架使得這更容易嗎? – tadman 2012-08-01 21:02:12

+0

感謝您的建議。我會看看他們,但我認爲在這種情況下我想要做的是擴大我的SQL查詢寫作能力。 – cog1 2012-08-02 14:14:24

+0

即使有框架,你仍然會編寫大量的SQL。這個想法是他們會爲你做很多常規的事情,而且通常比你手工做得更好。 – tadman 2012-08-02 15:10:50

回答

0

那麼這一切都取決於你的日期結構。如果它們的格式爲DD/MM/YYYY,其中的值僅爲int 03221990,則可以嘗試使用簡單的大於或小於運算符來隔離可用的日期,並且這些都可以在查詢中完成。通過這種方式,您可以找到適合粗略日期描述的一系列物品,但不一定必須完全符合您的開始日期和結束日期。你的日期結構如何?

+0

在我看來,Unix時間戳比您所說的更便於攜帶。 DATE類型也是MySQL的一個很好的選擇。人們沒有理由使用INT作爲日期。 – 2012-08-01 21:10:57

+0

哦,這就是他們的結構,我工作..... – dudebroman 2012-08-01 21:25:43

+0

日期是在MySQL日期類型。 – cog1 2012-08-02 14:55:29

0

您的預訂表可能看起來像:

ItemID | booked 
23 | 2012-08-01 
23 | 2012-08-02 
23 | 2012-08-03 

凡項目23被黃牌警告3天。所以,當物品被預訂時添加行。

給定日期範圍2012-08-03至2012-08-05爲每個單獨的日期,請選擇那些不在預訂表中的項目。我並不確定,但我認爲這可以通過「完全外部連接」來實現。

+0

這是一個有趣的想法。這將意味着改變表格的結構,但我在將來設計表格時肯定會考慮這種方法。 – cog1 2012-08-02 14:16:51

+0

是的,它有優點和缺點,但值得考慮。它不適合每個以日期爲中心的應用程序,但我喜歡它,因爲它使得獲取數據變得更加容易。 Thx的答覆。 – Cups 2012-08-02 20:09:51