我在数据库中有一个用于会议时间表的表格。它有 2 列名为 start
和 end
,由于我无法访问用新数据填充此表的 php 脚本,因此我不确定它是哪种格式。
但是 PHPMyAdmin 显示开始和结束的列是varchar(15)
所以我想它应该是日期时间兼容的。
数据库中的示例:1378033200显示为 01 九月 2013
我的问题是,我想拉取会议并在 html 页面中显示它们,但我不希望显示超过 2 天前(服务器时间)的会议。将查询什么?
SELECT * FROM schedules ORDER BY start
类似的东西
SELECT * FROM schedules ORDER BY start WHERE start > 2 days ago
我试过这个,但似乎什么也没做!
SELECT *
FROM schedules
WHERE COALESCE(start, 0) < CURDATE() - INTERVAL 2 DAY
ORDER BY start
但是 PHPMyAdmin 显示开始和结束的列是 瓦尔查尔(15) 所以我想它应该是日期时间兼容的。
你猜错了。字符串只能作为字符串排序。这意味着,除非您使用可排序的日期格式(YYYY/MM/DD
是一种:我不知道其他格式),否则您必须解析所有结果并在PHP中自己进行计算(否则,13/11/2000将在14/01/2000之前)。或者,您可能希望为列使用正确的类型:日期时间、日期或时间戳。完成此操作后,您将能够查询数据库并与<
和>
运算符比较日期。
对于2 days ago
部分,您想知道MySql有一个内置的NOW变量,您可以对天数求和/减去。如果你能正确地设计你的数据库,你甚至不必接触PHP(这是一件值得期待的事情)。
试试这个:
SELECT *
FROM schedules
WHERE COALESCE(start, 0) < DATE_SUB(NOW(), INTERVAL 2 DAYS)
ORDER BY start