我在数据库中有一个表用于会议日程安排。它有2列名为start
和end
,因为我无法访问用新数据填充此表的php脚本,我不确定它是以哪种格式。
但PHPMyAdmin显示开始和结束的列是varchar(15)
所以我想它应该是与datetime兼容的。
DB中的示例:1378033200 显示为2013年9月1日
我的问题是,我想拉开会议并在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
答案 0 :(得分:1)
但PHPMyAdmin显示了开始和结束的列 varchar(15)所以我想它应该与datetime兼容。
你猜错了。字符串只能作为字符串排序。这意味着,除非你使用可排序的日期格式(YYYY/MM/DD
是一个:我不知道其他人)你将不得不解析所有结果并自己在PHP中进行计算(否则,13 / 11/2000将于2000年1月14日之前到来)。或者,您可能希望为列使用正确的类型:datetime, date or timestamp。一旦你这样做,you'll be able to query your db and compare dates与<
和>
运营商合作。
对于2 days ago
部分,您想知道MySql有一个内置NOW变量you can sum/subtract days。如果你正确设计你的数据库,你甚至不需要触摸PHP(这是一个令人期待的事情)。
答案 1 :(得分:0)
试试这个:
SELECT *
FROM schedules
WHERE COALESCE(start, 0) < DATE_SUB(NOW(), INTERVAL 2 DAYS)
ORDER BY start