美好的一天,
我正在创建一个用户可以共享帖子的功能,其他用户可能会喜欢或评论"在它.. ..
现在在我的POST桌子上我有#34; id"和" source_id" +其他详细信息,以跟踪喜欢帖子的人我创建了一个专门用于详细信息的表格。列:ID,USER_ID(喜欢帖子的使用ID),post_id
帖子表:
id | source_id | caption
1 1 original post
2 1 share from id: 1 posts
3 3 new posts
4 4 new posts
喜欢桌子:
id | post_id | user_id
1 1 2
2 1 10
3 2 11
4 2 4
5 2 20
6 3 11
7 4 19
8 4 10
为了计算帖子的喜欢数量,我做
SELECT a.id, a.source_id,b.num_likes
FROM posts AS a
LEFT JOIN (SELECT COUNT(user_id) AS
num_likes,post_id
FROM post_likes GROUP BY post_id ) AS b
ON b.post_id= a.id
WHERE b.num_likes != 0
结果:
id | source_id | num_likes
1 1 2 <--- original post
2 1 3 <--- shared post who also got likes
3 3 1
4 4 2
我想要实现的就像这些
id | source_id | num_likes
1 1 5
3 3 1
4 4 2
这可以通过查询来实现吗?如果是的话,请你帮助我实现这个目标..
非常感谢!
答案 0 :(得分:2)
您可以直接加入表格。
SELECT MIN(a.id), a.source_id, COUNT(b.num_likes) FROM posts AS a
LEFT JOIN post_likes AS b ON b.post_id= a.id
GROUP BY a.source_id
HAVING b.num_likes > 0
可能需要为a.id使用MIN
,因为它没有聚合。这取决于您的数据和用例。
答案 1 :(得分:0)
使用SUM函数获得总喜欢。
SELECT min(a.id) as id, a.source_id,sum(b.num_likes) as num_likes
FROM posts AS a
LEFT JOIN (SELECT count(1) AS
num_likes,post_id
FROM post_likes GROUP BY post_id ) AS b
ON b.post_id= a.id
WHERE b.num_likes != 0
GROUP BY a.source_id