2014-02-11 29 views
1

我有一个用户表,我将注册日期存储为UNIX时间戳。我会选择7/14/21/28/...天前注册的所有用户。所以,如果我有这样的情况(我不使用UNIX时间戳的例子,是想更清楚):查询记录7/14/21/28 ...前几天在Mysql

+-------------------------------------------------+ 
| 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语句来选择我的记录,但我希望有人会帮助我找到更好的记录。

+1

所以你感兴趣的结果,其中天差的过去和现在之间的数等于模数7? – Strawberry

回答

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

+0

感谢您链接文档。由于我的“registration_date”是UNIX时间戳,因此您的查询不起作用。但看的文档,我发现 “FROM_UNIXTIME”,这是我的问题解决方案: 'SELECT * FROM 用户 WHERE DATEDIFF(FROM_UNIXTIME(注册),NOW())%= 7 0' –

+0

是FROM_UNIXTIME功能呢转换好抓:-) –

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