PHP/SQL查询最近1小时内last_modified数据异常问题
问题解决方案
核心问题分析
- 当前代码用
subDays(1)却要查询最近1小时的数据,逻辑完全不符 format('Y-m-d')仅保留日期部分,丢失了时分秒,无法精确匹配时间范围- 条件
last_modified < ($day_ago)是筛选早于一天前的数据,和你要的“最近1小时内”需求完全相反
修正后的代码
// 获取当前时间往前推1小时的完整日期时间(含时分秒) $hour_ago = Carbon::now()->subHour()->toDateTimeString(); $sql = "SELECT appt_id, provider_id, start_datetime, end_datetime, added_zen, appt_notes, pt_fname, pt_lname, conf_status, last_modified, zen_block_out_time_id FROM appointments WHERE is_del = 0 AND zen_block_out_time_id IS NOT NULL AND last_modified >= '$hour_ago' AND location_id = 2 ORDER BY start_datetime ASC";
关键修正点
- 用
subHour()替代subDays(1),精准定位1小时前的时间节点 - 用
toDateTimeString()保留完整的日期+时间格式,确保和数据库last_modified字段格式匹配 - 将条件从
<改为>=,筛选出1小时内更新过的记录 - 移除多余括号,让SQL逻辑更清晰
额外实现方式(无需Carbon)
如果你的last_modified是MySQL的DATETIME或TIMESTAMP类型,直接用SQL原生函数也能实现:
SELECT appt_id, provider_id, start_datetime, end_datetime, added_zen, appt_notes, pt_fname, pt_lname, conf_status, last_modified, zen_block_out_time_id FROM appointments WHERE is_del = 0 AND zen_block_out_time_id IS NOT NULL AND last_modified >= DATE_SUB(NOW(), INTERVAL 1 HOUR) AND location_id = 2 ORDER BY start_datetime ASC
内容的提问来源于stack exchange,提问作者sky_CSW
相关产品推荐
相关产品推荐

