gpt4 book ai didi

php - 惯用查询获取今天的记录

转载 作者:行者123 更新时间:2023-11-30 00:48:16 25 4
gpt4 key购买 nike

我一直在使用 Idiorm,但无法让它从数据库中获取今天和昨天的所有记录。所以,MySQL 查询是:

SELECT * FROM `video` WHERE DATE(`time_stamp`) = CURDATE()    # today
SELECT * FROM `video` WHERE DATE(`time_stamp`) = CURDATE() -1 # yesterday

如果我理解正确的话,它不能被 Idiorm 完全重现,对吗?我还尝试了以下选项,但奇怪的是它不起作用(返回空数组):

$today = ORM::for_table('video')->
where_lt('time_stamp', 'CURDATE()')->
where_gte('time_stamp', 'CURDATE()-1')->find_many();

您能纠正我应该如何完成吗?

最佳答案

为了提高 MySQL 性能,最好避免对列值使用函数。例如,

WHERE DATE(time_stamp) = CURDATE()   /* slow! */

完全击败了使用索引通过time_stamp查找记录。它会导致全表扫描,该扫描工作正常但速度缓慢。您需要的是一个能够生成索引范围扫描的 SQL 表达式。对于自今天日期午夜以来的所有 time_stamp 值,都会执行此操作。

WHERE time_stamp >= CURDATE()

如果你想找到昨天的所有time_stamp值,你需要这个SQL语句

WHERE time_stamp >= CURDATE() - INTERVAL 1 DAY
AND time_stamp < CURDATE()

也就是说,您需要 [昨天午夜,今天午夜] 范围内的所有时间戳,该范围不包括今天午夜。

我认为您的 Idiorm 代码的 CURDATE() - INTERVAL 1 DAY 表达式错误。 CURDATE() - 1 适用于 Oracle,但不适用于 MySQL。

关于php - 惯用查询获取今天的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21189811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com