我的查询有问题。它给了我一些案例的正确结果,而有些情况却没有,所以如果有人能告诉我要改变什么,那就太好了,因为我现在已经坚持了一段时间。这是我的表数据:
表reservation_logs:
log_id int(15) auto_increment Primary Unique
room_log int(10)
dt_from date
dt_until date
表公寓:
apartman_id int(10) auto_increment Primary Unique
apartman_name int(10)
我的日期PHP代码:
$date_from = 'text input date';
$date_until = 'text input date';
$myquery = ("SELECT * FROM reservation_logs WHERE room_log = '$apartman_id'
AND(((dt_from >= '$date_from' AND dt_from <= '$date_until')
AND (dt_until >= '$date_until' OR dt_until <= '$date_until')))");
现在我输入了一些我应该正确的日期apartman_id
,如果它很忙或没有。这是有效的情况:当$date_from
等于该月的第一天而$date_until
等于一个月的最后一天。但是,例如,如果我选择日期$date_from
等于月份的第16个而$date_until
等于该月的第17个,如果房间从月的15日到第19个忙,那么我得到的结果不正确。我希望我没有太多复杂化,我只是想让更多人了解这一点。
答案 0 :(得分:1)
所以你想在$ date_from和$ date_until之间找到预订,即使它们只是重叠这个日期范围?像这一样简单就足够......
SELECT * FROM reservation_logs WHERE room_log = '$apartman_id'
AND dt_from <= $date_until
AND dt_until >= $date_from ;
它只是排除在日期范围之后开始的任何预订,以及在日期范围之前完成的任何预订。剩下的任何东西必须在日期范围内或与之重叠。
答案 1 :(得分:0)
dt_until >= '$date_until' OR dt_until <= '$date_until'
永远是真的......
答案 2 :(得分:0)
dt_from >= '$date_from' AND dt_from <= '$date_until'
...仅当$date_from
= $date_until
时才会这样。