MySQL查询指定日期区间内房间统计数据无结果的解决方法
解决日期区间重叠的统计问题
你的SQL条件逻辑出了问题,导致没有匹配到任何记录。咱们先理清楚两个时间段重叠的核心判断逻辑:当一条记录的入住/退房区间和你指定的查询区间($in到$out)有任何重叠时,就应该被统计进来。
原SQL里的条件绕了弯路,而且判断逻辑不准确。正确的重叠判断应该是:
记录的入住日期 < 查询区间的结束日期,并且记录的退房日期 > 查询区间的开始日期
用这个逻辑来写WHERE条件,就能准确匹配到所有符合要求的记录了。
正确的SQL语句
SELECT COUNT(id) AS record_count, SUM(room_count) AS total_rooms FROM table_name WHERE date_in < '$out' AND date_out > '$in';
为什么这个逻辑有效?
咱们拿你的示例查询区间($in = '2021-08-19',$out = '2021-08-31')和数据来验证:
- 记录3:2021-08-19至2021-08-22 → 完全在查询区间内,符合条件
- 记录4:2021-08-19至2021-08-23 → 符合
- 记录5:2021-08-22至2021-08-25 → 符合
- 记录6:2021-08-22至2021-08-25 → 符合
- 记录7:2021-08-23至2021-08-24 → 符合
- 记录8:2021-08-23至2021-08-28 → 符合
这些记录都会被正确统计,最终得到的结果是:
- record_count: 6
- total_rooms: 1+1+1+2+3+6 = 14
额外提醒
为了避免SQL注入风险,建议不要直接把变量拼接到SQL语句里,而是使用预处理语句(比如PHP里的PDO或mysqli预处理,Java的PreparedStatement等),这样更安全也更规范。
内容的提问来源于stack exchange,提问作者Alexandru Dulab
相关产品推荐
相关产品推荐

