1

我有 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 中选择?

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

更新

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

4

1 回答 1

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 查询。

于 2013-05-27T04:20:17.127 回答