首页 > 解决方案 > WHERE 在时间范围内不与 LEFT JOIN 一起工作,我该如何纠正?

问题描述

我想选择日期范围内但连接内的列(特定于左连接),这意味着所有已预订但出发日期未超过今天的预订,每当我放置 WHERE AND 函数时,它都不起作用。我在哪里犯错了?

我试图删除日期或日期,它可以正常工作,但它根本没有任何意义

$currentTime = date('Y-m-d');
$sql = "
SELECT * 
  FROM rooms
  LEFT 
  JOIN bookings 
    ON rooms.guest_id = bookings.guest_id 
 WHERE bookings.date_in <= $currentTime
   AND bookings.date_out >= $currentTime
 ORDER 
    BY rooms.id DESC
";

我希望今天和前几天预订但仍在使用中的房间无论何时被预订都会显示出来,但那些约会已过的房间不应该显示出来!我是新手!

标签: mysql

解决方案


您不应该在 where 使用左连接表列(这作为内部连接)您应该在 ON 子句中移动这些条件

    $currentTime = date('Y-m-d');
    $sql = "
    SELECT * FROM rooms 
    LEFT JOIN bookings ON rooms.guest_id = bookings.guest_id 
        AND  bookings.date_in <= '". $currentTime . "'
            AND bookings.date_out >= '" .$currentTime ."'
    ORDER BY rooms.id DESC";

或者您可以使用 mysql curdate() 函数而不是获取 php 的实际日期时间

 $sql = "
    SELECT * FROM rooms 
    LEFT JOIN bookings ON rooms.guest_id = bookings.guest_id 
        AND curdate() between  bookings.date_in AND bookings.date_out 
    ORDER BY rooms.id DESC";

推荐阅读