在MySQL的一段时间内计算每个用户的帖子数和总数

时间:2013-05-27 04:09:44

标签: mysql count

我有2个表:membersposts

在表格members中,我为每个用户USERID。在表格posts中,我为每个帖子PID和创建帖子的用户USERID。每个帖子还有number_of_like,表示帖子被喜欢的次数。

/*Table: posts*/
----------------

Field              Type              Null    Key     Default         Extra          
-----------------  ----------------  ------  ------  ----------  --------------
PID                bigint(20)        NO      PRI     (NULL)      auto_increment
USERID             bigint(20)        NO              0                         
number_of_like     int(10) unsigned  YES             0                         
number_of_comment  int(10) unsigned  YES             0                         
date_added         date              NO              0000-00-00

现在我想要算一下:在(DATE(date_added) > CURDATE() - INTERVAL 30 DAY)的时间范围内,每个用户都有多少帖子和总数。我按月和周计算。

我可以直接在查询中执行此操作吗?或者我必须使用foreach来计算每个用户,将其写入stats表,然后在需要时从stats进行SELECT?

非常感谢任何帮助。谢谢:))

更新

我需要列出所有用户,无论他们的帖子数量如何。

1 个答案:

答案 0 :(得分:2)

是的,这可以做到。尝试这样的事情:

SELECT 
    U.USERID,
    COUNT(*),                <- total of posts per user
    SUM(A.number_of_like)    <- total of likes in these posts
FROM users U
LEFT JOIN posts A ON U.USERID = A.USERID
WHERE ISNULL(A.USERID) 
    OR A.date_added > DATE_ADD(CURDATE(), INTERVAL -30 DAY)
GROUP BY A.USERID;

我使用DATE_ADD进行日期计算,其他日期函数也可以在这里使用。

更新

在您提供了每个用户(不仅是有帖子的用户)的详细信息之后,我已经更新了上面的SQL查询。