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

如何将PHP中date()返回值与数据库timestamp字段进行日期比较

解决方案

一、PHP生成日期与MySQL timestamp字段的比较方法

方法1:SQL日期函数转换(适合小数据量场景)

直接用MySQL自带的DATE()函数将timestamp字段转为日期格式,和PHP生成的日期直接匹配即可:

$current_date = date("Y-m-d");
$fetch_user_by_number = "SELECT id,transfer_amount,number FROM `transfer_wallet` 
WHERE `transfer_number`=:number AND DATE(`transaction_date`) = :current_date 
ORDER BY `transaction_date` DESC limit 1";
// 执行SQL时将$current_date绑定到:current_date参数即可

该方法写法简单,但DATE()函数会导致transaction_date字段的索引失效,数据量较大时查询性能较低。

方法2:时间区间匹配(推荐,可走索引)

将比较逻辑改为 timestamp 字段落在当日0点到次日0点的左闭右开区间,不会触发字段函数计算,可正常使用索引:

$today_start = date("Y-m-d 00:00:00");
$tomorrow_start = date("Y-m-d 00:00:00", strtotime("+1 day"));
$fetch_user_by_number = "SELECT id,transfer_amount,number FROM `transfer_wallet` 
WHERE `transfer_number`=:number 
AND `transaction_date` >= :today_start 
AND `transaction_date` < :tomorrow_start 
ORDER BY `transaction_date` DESC limit 1";
// 执行SQL时绑定$today_start、$tomorrow_start两个参数即可

二、新数据插入触发推送的实现逻辑

单纯的日期比较只能匹配当日数据,要实现新数据插入即推送的需求,推荐用增量查询方案:

  • 每次查询完成后,记录本次查询到的最大id值(或者最新的transaction_date时间值),存储到缓存、配置文件或者服务内存中
  • 下一次轮询查询时,新增条件id > 上次记录的最大id(或者transaction_date > 上次记录的最新时间)
  • 如果查询返回结果不为空,说明有新增数据,直接调用APP推送服务对应用户发通知即可

如果对实时性要求不高,每隔几秒到几分钟轮询一次即可满足需求;如果需要强实时性,可以搭配数据库触发器+消息队列实现,数据插入时直接触发推送任务。

内容的提问来源于stack exchange,提问作者Ginxxx

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:54:03