Php 在过去7天内获取注册用户

Php 在过去7天内获取注册用户,php,mysql,sql,Php,Mysql,Sql,我试图在过去7天内获得registerd用户,因此我有users表 +-----+------------+--------------+ | ID | USERNAME | ADDED | +-----+------------+--------------+ | 1 | Vlad | 1347386878 | +-----+------------+--------------+ | 2 | Test | 1347386578 |

我试图在过去7天内获得registerd用户,因此我有users表

+-----+------------+--------------+
| ID  | USERNAME   | ADDED        |
+-----+------------+--------------+
|  1  | Vlad       | 1347386878   |
+-----+------------+--------------+
|  2  | Test       | 1347386578   |
+-----+------------+--------------+
我尝试了以下sql,但输出为空,没有错误。。。我需要从今天降到7天前

SELECT date(added), COUNT(id) AS num_registered 
FROM users 
WHERE added < CURDATE() 
AND added > CURDATE() - INTERVAL 7 DAYS 
GROUP BY date(added) LIMIT 1, 7

您需要使用FROM_UNIXTIME将时间戳转换为日期时间。由于发生了大量转换,因此使用派生表会更容易:

SELECT DATE(Added), COUNT(id) AS num_registered FROM
    (SELECT id, username, FROM_UNIXTIME(added) AS added FROM users) u
WHERE added < CURDATE()
    AND added > CURDATE() - INTERVAL 7 DAYS
GROUP BY DATE(added) LIMIT 1, 7

您需要使用FROM_UNIXTIME将时间戳转换为日期时间。由于发生了大量转换,因此使用派生表会更容易:

SELECT DATE(Added), COUNT(id) AS num_registered FROM
    (SELECT id, username, FROM_UNIXTIME(added) AS added FROM users) u
WHERE added < CURDATE()
    AND added > CURDATE() - INTERVAL 7 DAYS
GROUP BY DATE(added) LIMIT 1, 7
ADDED是一个UNIX时间戳值,因此只需执行以下操作:

SELECT
    DATE(Added), Count()
FROM
    Users
WHERE
    Added > ( UNIX_TIMESTAMP() - ( 7 * 24 * 60 * 60 ) )
GROUP BY
    DATE(Added)
LIMIT
    1, 7
请注意,这在处理闰秒的情况下不起作用,因为它使用了一天的近似定义为24*60*60,但我想您可以接受它。

添加的是UNIX时间戳值,所以只需执行以下操作:

SELECT
    DATE(Added), Count()
FROM
    Users
WHERE
    Added > ( UNIX_TIMESTAMP() - ( 7 * 24 * 60 * 60 ) )
GROUP BY
    DATE(Added)
LIMIT
    1, 7
SELECT FROM_UNIXTIMESTAMP(added, ,  '%b %D, %Y'), COUNT(id) AS num_registered 
FROM users 
WHERE added > unix_timestamp() - ( 7 - 86400 )
GROUP BY FROM_UNIXTIMESTAMP(added, ,  '%b %D, %Y')

请注意,这在处理闰秒的情况下不起作用,因为它使用了一天的近似定义为24*60*60,但我想你可以接受它。

检查CURDATE生成日期的格式,添加的列的数据类型是什么?尝试使用GETDATE或NOW@VladS,因为您在其中添加了时间戳,所以将其类型设置为正确的,以便mySQL知道它的含义。mySQL中有许多内置函数可以在需要时对其进行转换:@WebnetMobile.com,因为我知道时间戳格式类似于:0000-00-00 00:00:00检查CURDATE生成日期的格式,看看是否与添加的格式相同。添加列的数据类型是什么?尝试使用GETDATE或NOW@VladS,因为您将时间戳放在了那里,将它的类型设置正确,这样mySQL就会知道它的意思。mySQL中有许多内置函数可以在需要时进行转换:@WebnetMobile.com,因为我知道时间戳格式类似于:0000-00-00 00:00:00删除LIMIT子句,并尝试从添加的用户中选择*>UNIX_timestamp-7*24*60*60,看看会发生什么。@Dai SELECT Added,COUNTid作为num_reg从用户测试中添加>UNIX_时间戳-7*24*60*60组中添加。它在没有限制子句的情况下工作。删除限制子句,并尝试从添加>UNIX_时间戳-7*24*60*60的用户中选择*,看看会发生什么。@Dai SELECT added,COUNTid作为num_reg来自users_test,其中added>UNIX_TIMESTAMP-7*24*60*60 GROUP BY added它的工作没有限制子句。
SELECT FROM_UNIXTIMESTAMP(added, ,  '%b %D, %Y'), COUNT(id) AS num_registered 
FROM users 
WHERE added > unix_timestamp() - ( 7 - 86400 )
GROUP BY FROM_UNIXTIMESTAMP(added, ,  '%b %D, %Y')