>今天
>昨天
>本周
>本月
>两个日期之间。
这是我试过的:
>今天
SELECT n.title,COUNT(*) AS times FROM node_view_count WHERE timestamp > DATE_SUB(NOW(),INTERVAL 1 DAY)
>昨天
SELECT n.title,INTERVAL 7 DAYS)
…
这不是真的工作
任何想法?
解决方法
>今天:WHERE timestamp> = CURDATE()
>昨天:WHERE timestamp> = DATE_SUB(CURDATE(),INTERVAL 1 DAY)AND timestamp< CURDATE()
>这个月:WHERE timestamp> = DATE_SUB(CURDATE(),INTERVAL DAYOFMONTH(CURDATE()) – 1天)
> 2013年6月3日和2013年6月7日的两个日期(注意结束日期如何指定为6月8日,6月7日):WHERE timestamp> =’2013-06-03’AND timestamp< “2013年6月8日”
“本周”取决于你开始一周的那一天;我会把它留给你您可以使用DAYOFWEEK
函数来调整CURDATE()到适当的范围。
附录:OP的列类型为INTEGER,存储UNIX时间戳,我的答案假定列类型为TIMESTAMP。以下是使用UNIX时间戳记值执行所有相同操作的方法,如果列被索引仍然保持优化(如上所述,如果TIMESTAMP列被索引)
基本上,解决方案是将开始和/或结束日期包含在UNIX_TIMESTAMP
函数中:
>今天:WHERE timestamp> = UNIX_TIMESTAMP(CURDATE())>昨天:WHERE timestamp> = UNIX_TIMESTAMP(DATE_SUB(CURDATE(),INTERVAL 1 DAY))和AND时间戳< UNIX_TIMESTAMP(CURDATE())>这个月:WHERE timestamp> = UNIX_TIMESTAMP(DATE_SUB(CURDATE(),INTERVAL DAYOFMONTH(CURDATE()) – 1 DAY))> 2013年6月3日和2013年6月7日的两个日期之间(注意结束日期如何指定为6月8日,6月7日):WHERE timestamp> = UNIX_TIMESTAMP(‘2013-06-03’)AND timestamp< UNIX_TIMESTAMP( '2013年6月8日')