Mysql BETWEEN子句被忽略。没有语法错误

时间:2010-04-12 16:03:01

标签: php mysql

我试图显示在两个单独的日期列(开始日期和结束日期)之间预订的项目。我想在日期之间进行搜索,但查询似乎忽略了所选日期之间的任何日期。

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,并且已正确输入。

2 个答案:

答案 0 :(得分: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"

第一个AND子句显然是假的(因为你的4/13开始日期确实不在4/14和4/16之间)

您的正确逻辑(假设您需要完整的预订间隔)是

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 

答案 1 :(得分:0)

是否有两个表中具有相同ID的记录集属于该条款?同时确保使用WHERE col BETWEEN a AND ba必须小于b才能正常工作。

如果你注释掉最后6行会得到什么?