mysql - 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
";
我希望今天和前几天预订但仍在使用中的房间无论何时被预订都会显示出来,但那些约会已过的房间不应该显示出来!我是新手!
解决方案
您不应该在 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";
推荐阅读
- java - 文件写入程序随机退出而没有错误
- c# - 在动态表中添加/编辑评论字段值
- node.js - 如何使用 $pull 和 TypeORM 来使用 Mngodb 删除对象 insude 数组?
- mongodb - 如何仅在嵌入式数组 Mongoose 中使用 findOneAndUpdate 投影更新的值?
- scala - 更新模式表并使用它
- python - 在与 __init__.py 相同的根文件夹中创建可编辑的包 setup.py
- bash - 如何检查以下文件是否存在与shell脚本中的条件不符?
- machine-learning - 为什么回归被认为是机器学习的一部分?
- inno-setup - Inno Setup 中的自定义消息和占位符文本
- python - Python:返回其他装饰器的装饰器