我有一个用户表,我将注册日期存储为UNIX时间戳。我会选择所有在7/14/21/28 / ...天前注册的用户。所以如果我有这样的情况(我在示例中没有使用unix时间戳只是为了更清楚):
+-------------------------------------------------+
| ID | username | registration_date |
+----+------------+-------------------------------+
| 1 | user1 | 11-02-2014 |
| 2 | user2 | 4-02-2014 |
| 3 | user3 | 28-01-2014 |
| 4 | user4 | 27-01-2014 |
+-------------------------------------------------+
查询应该返回用户#2,#3而不是数字#4,因为他15天前注册,15不是7的倍数。
意大利面条解决方案可能是编写数千个WHERE语句来选择我的记录,但我希望有人能帮我找到更好的记录。
答案 0 :(得分:3)
试试这个
SELECT * FROM users
WHERE DATEDIFF(registration_date, NOW()) % 7 = 0
在这里查看datediff和mod操作符
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_datediff
https://dev.mysql.com/doc/refman/5.1/en/mathematical-functions.html#function_mod
答案 1 :(得分:1)
下面,
The DATEDIFF() function returns the time between two dates.
SQL FORMAT()语法
SELECT FORMAT(column_name,format) FROM table_name;
你的SQL查询看起来像:
SELECT ID, username, registration_date FROM users
WHERE DATEDIFF(registration_date, NOW()) % 7 = 0
或
SELECT ID, username, registration_date FROM users
WHERE MOD(DATEDIFF(registration_date, NOW()), 7) = 0