我有一个包含字段birthday
(日期)的用户表。
目前,我选择的用户生日是在当前日期之前或之后的7天内,如下所示:
SELECT * FROM users
WHERE
DATE_FORMAT(birthday, '1980-%m-%d')
BETWEEN
DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 7 day), '1980-%m-%d')
AND
DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL 7 day), '1980-%m-%d')
正如您所看到的,考虑到通过制作的1980年日期格式进行比较,此查询不是最简化的。此外,我认为这将无法在一年的最后一周和第一周正确选择生日用户。
虽然我看到了这个问题,但我很难找到如何解决这个问题。我该怎么做才能改进这个查询?
答案 0 :(得分:3)
试试这个过滤器 -
WHERE
birthday + INTERVAL EXTRACT(YEAR FROM NOW()) - EXTRACT(YEAR FROM birthday) YEAR
BETWEEN CURRENT_DATE() - INTERVAL 7 DAY AND CURRENT_DATE() + INTERVAL 7 DAY
答案 1 :(得分:1)
$int_range = 7;
$int_start = strtotime("today -{$int_range} Days")
$arr_days = array();
for($i = 1; $i <= ($int_range * 2); $i++)
$arr_days[] = "'".date('m-d', strtotime("+{$i} Days", $int_start))."'";
$str_days = implode(', ', $arr_days);
mysql_query("
SELECT * FROM users
WHERE DATE_FORMAT(birthday, '%m-%d') IN ({$str_days})
");