在Mysql中查询7/14/21/28 ...天前的记录

时间:2014-02-11 09:13:00

标签: php mysql sql

我有一个用户表,我将注册日期存储为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语句来选择我的记录,但我希望有人能帮我找到更好的记录。

2 个答案:

答案 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