MySQL查询DATE比较

时间:2009-09-22 20:34:45

标签: php sql mysql

我的查询有问题。它给了我一些案例的正确结果,而有些情况却没有,所以如果有人能告诉我要改变什么,那就太好了,因为我现在已经坚持了一段时间。这是我的表数据:

表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个忙,那么我得到的结果不正确。我希望我没有太多复杂化,我只是想让更多人了解这一点。

3 个答案:

答案 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时才会这样。