我有2个表:members
和posts
在表格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?
非常感谢任何帮助。谢谢:))
更新
我需要列出所有用户,无论他们的帖子数量如何。
答案 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查询。