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

PHP/SQL查询最近1小时内last_modified数据异常问题

问题解决方案

核心问题分析

  1. 当前代码用subDays(1)却要查询最近1小时的数据,逻辑完全不符
  2. format('Y-m-d')仅保留日期部分,丢失了时分秒,无法精确匹配时间范围
  3. 条件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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 20:55:22