关于 php:MySQL 选择所有超过 10 天的条目 | 珊瑚贝

MySQL select all the entries older than 10 days


大家好,我正在开发一个小脚本,它必须检查 MySQL 数据库中的条目是否至少早于 10 天。
该表有一个时间戳字段(这是我想使用的,但如果需要我可以更改它)。
实际上我正在使用这个 sql 字符串:

1
2
3
4
SELECT *
FROM entries
WHERE tag=‘$tag’
  AND DATE(last_update) > DATE_SUB(CURDATE(), INTERVAL 10 DAY)

但我发现一些选定的条目”年轻”于 10 天,所以也许我弄错了什么。
这是正确的方法还是更好地通过 PHP(而不是 MySQL 查询)检查它?

提前致谢。

  • 你可以发布一个例子吗?像 CURDATE() = X 和 DATE(last_update)=Y 一样,返回错误 Y 的示例是什么?
  • 我不知道这一点,因为 last_update 字段每次都在”更新”,我得到错误行为的唯一线索是我有一个每次都会递增的”post count”字段,我发现一些 thise 计数增加太多
  • 在 DB shell 中测试查询通常很有帮助。它通常不会改变数据。


older than 10 days 应该是 before 计算的日期。

1
2
SELECT * FROM entries
WHERE tag=‘$tag’ AND DATE(last_update) < DATE_SUB(CURDATE(), INTERVAL 10 DAY)
  • 嗯……你是对的……我想我搞砸了。
  • 即使 last_update 是 dateTime 你也不需要 Date()
  • 每次我谷歌我都想知道为什么它这么复杂。我的意思是在理想世界中的语法应该像 DATE>10d
  • @ArsenIbragimov,因为它是一种”简单”查询语言。当他们制作它时,他们想创造一种人类可以轻松阅读的东西……显然失败了。


你也可以使用 DATEDIFF():

1
2
3
4
SELECT *
FROM entries
WHERE tag=‘$tag’
AND DATEDIFF(CURDATE(), DATE(last_update)) > 10

您还可以考虑您的查询并添加负间隔值:

1
2
3
4
SELECT *
FROM entries
WHERE tag=‘$tag’
  AND DATE(last_update) > DATE_SUB(CURDATE(), INTERVAL 10 DAY)

来源:https://www.codenong.com/36545152/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_9650.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?