7

我有一个名为“entry_date”的列 DATETIME 的数据库表,例如...

ID  entry_date
1   2012-10-13
2   2012-10-14
3   2012-10-15
4   2012-10-20
5   2012-10-20
6   2012-10-21

在 PHP/MYSQL 中基于 DATE 回显结果的最佳方法是什么,所以我只得到本周的结果,所以 2012-10-15 > 2012-10-21,但显然我不能只编码因为每天都在变化:) 那么你将如何在 php 中做到这一点,所以明天本周的条件将是 2012-10-16 > 2012-10-22

4

1 回答 1

10

今天,使用

where date(`entry_date`) = curdate()

这个月,

where month(`entry_date`) = month(curdate()) 
and  year(`entry_date`) = year(curdate()) 

本周

WHERE `entry_date` 
BETWEEN (CURDATE() - Interval DAYOFWEEK(CURDATE()) day) 
AND (CURDATE() - Interval DAYOFWEEK(CURDATE()) day + Interval 1 week)

以上查询有助于理解。但从性能的角度来看并不好。见下面修改的一个。它要好得多。

SET @s:=(CURDATE() - Interval DAYOFWEEK(CURDATE()) day)
SET @e:=(CURDATE() - Interval DAYOFWEEK(CURDATE()) day + Interval 1 week)
SELECT ....  WHERE `entry_date` BETWEEN @s AND @e

这里 DAYOFWEEK 函数返回一个从 1=Sunday 开始的整数。所以你的星期将被算作星期六作为开始日期。如果你想星期一添加+ Interval 2 day间隔。

也可以简化为以下。但它不支持任何一天作为一周的第一天。所以它不能移植到所有文化中。

where yearweek(`entry_date`) = yearweek(curdate())
于 2012-10-20T23:12:24.887 回答