我试图显示在两个单独的日期列(开始日期和结束日期)之间预订的项目。我想在日期之间进行搜索,但查询似乎忽略了所选日期之间的任何日期。
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,并且已正确输入。
答案 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 b
,a
必须小于b
才能正常工作。
如果你注释掉最后6行会得到什么?