You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 05:12:43