MySQL选择事件前7天和事件后7天

标签 mysql events

我有包含用户生日和姓名的数据库。我想选择从 7 天前到 future 7 天生日/命名日的所有用户,此选择有效,但我不知道如何解决生日/命名日为 31.12 的用户的问题。例如。 PHP 将返回“用户在 3 天前过生日”,此选择仅在年底前 7 天和新年后 7 天有效。非常感谢您的帮助。

SELECT `name`, `surname`, `gender`, ('birthday') AS event,
  DATEDIFF(NOW(), DATE(REPLACE(`birthday`, YEAR(`birthday`), YEAR(NOW())))) AS diff
FROM `users`
WHERE DATEDIFF(NOW(), DATE(REPLACE(`birthday`, YEAR(`birthday`), YEAR(NOW()))))
BETWEEN -7 AND 7
UNION
  SELECT `name`, `surname`, `gender`, ('namesday') AS event,
    DATEDIFF(NOW(), DATE(REPLACE(`namesday`, YEAR(`namesday`), YEAR(NOW())))) AS diff
  FROM `users`
  WHERE DATEDIFF(NOW(), DATE(REPLACE(`namesday`, YEAR(`namesday`), YEAR(NOW()))))
  BETWEEN -7 AND 7

最佳答案

好问题。 这是我到目前为止所做的。我不确定它是否完美,但这可能是一个好的开始。试试看吧。

select *,
if(right(birthday,5)>=right(curdate(),5),concat(year(curdate()),'-',right(birthday,5)),concat(year(curdate()+interval 1 year),'-',right(birthday,5))) as next_birthday,
if(right(birthday,5)<right(curdate(),5),concat(year(curdate()),'-',right(birthday,5)),concat(year(curdate()-interval 1 year),'-',right(birthday,5))) as prev_birthday
from users
having next_birthday 
between curdate() - interval 7 day and curdate() + interval 7 day
or prev_birthday 
between curdate() - interval 7 day and curdate()

关于MySQL选择事件前7天和事件后7天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10591429/

相关文章:

php - 我应该使用 PHP 进行数据库连接吗

mysql - LOAD DATA LOCAL INFILE 并在 mysql 数据库中搜索值

php - MySQL 存储函数和 php

Javascript将字符串转换为alt快捷键

javascript - 检测 SPAN 何时*再次*可见

mysql - MYSQL中获取距离10km的记录

php - 此集合实例上不存在属性 [stats]

javascript - 拖放,防止尴尬的突出显示?

javascript - 在没有提交表单或按文本框外部的情况下检查文本框是否在有值后变空

c++ - 最大化窗口后的Qt Scale图像