2010-04-12 46 views
3

即時通訊嘗試顯示兩個單獨的日期列(開始和結束日期)之間預訂的項目。我想在日期之間進行搜索,但查詢似乎忽略了落在所選日期之間的任何日期。Mysql BETWEEN子句被忽略。沒有語法錯誤

SELECT 
bookings.booking_id, 
bookings.booking_id, 
bookings.booked_from, 
bookings.booked_from, 
bookings.booked_till, 
item_set_computer.item_id, 
item_set_computer.name, 
item_set_computer.booking_groups_id 
FROM 
bookings, 
item_set_computer 
WHERE 
item_set_computer.item_id = bookings.item_id 
AND 
item_set_computer.booking_groups_id = 3 
AND 
booked_from 
BETWEEN "2010-04-13" AND "2010-04-20" 
AND 
booked_till 
BETWEEN "2010-04-13" AND "2010-04-20" 

例如,我有一個項目預訂從13日至15日。 date1是2010-04-13,date2是2010-04-15。用戶從14日至16日搜索預訂商品。它沒有返回結果。爲什麼忽略用戶選擇日期之間的數據庫日期?該列在數據庫中設置爲DATE,並且已正確輸入。

+1

如果您發佈到MySQL命令行,您的查詢是否有效? – 2010-04-12 16:05:06

回答

0

是否有記錄集在這兩個表中都屬於同一個id?還要確保用WHERE col BETWEEN a AND b,a必須小於b才能工作。

如果您註釋掉最後6行,返回什麼?

+0

它返回的結果僅限於預訂組和預訂。是的,存在具有相同item_id的記錄集。 – Mark 2010-04-12 16:42:15

4

你說過:「用戶從14日到16日搜索預定項目。」

這意味着您的查詢就會

AND 
booked_from 
BETWEEN "2010-04-14" AND "2010-04-16" 
AND 
booked_till 
BETWEEN "2010-04-14" AND "2010-04-16" 

第一與條款顯然是錯誤的(因爲你的4/13開始日期是不是的確4/14 4/16和之間)

的你正確的邏輯(假設您想要的FULL預訂間隔)

AND booked_from >= "2010-04-14" 
AND booked_till <= "2010-04-16" 

或者,如果你想要的部分區間

AND booked_from >= "2010-04-16" -- means we booked before the end of interval 
AND booked_till <= "2010-04-14" -- means we left after the start 
+0

+1擊敗我! – 2010-04-12 16:11:08

+0

+1。重疊的預訂間隔時間將會是'reservations_from <='2010-04-16'AND booked_till> ='2010-04-14'' – Quassnoi 2010-04-12 16:12:52

+0

@Quassnoi - lol好點,當您發表評論時,我正在打字:) – DVK 2010-04-12 16:15:57