我想要使用两个表来确定stream_post的“流行度”。 Stream_Post_Comment和Stream_Post_Like。
stream_post_comment_id stream_post_id user_id
1 1 1
2 2 1
3 2 4
4 2 1
stream_post_like_id stream_post_id user_id
1 1 1
2 2 3
3 3 2
4 3 1
我无法概念化一个输出如下输出的查询:
stream_post_id popularity
1 1
2 3
3 2
其中user_id仅在给定帖子的受欢迎度得分中计算一次。例如,如果他们评论并喜欢帖子,他们只会算作“1”人气得分。
答案 0 :(得分:1)
试试这个:
SELECT
stream_post_id,
COUNT(DISTINCT user_id) AS popularity
FROM
(
SELECT stream_post_id, user_id
FROM stream_post_comment
UNION ALL
SELECT stream_post_id, user_id
FROM stream_post_like
) AS sub
GROUP BY stream_post_id;
这会给你:
| STREAM_POST_ID | POPULARITY |
-------------------------------
| 1 | 1 |
| 2 | 3 |
| 3 | 2 |
答案 1 :(得分:0)
似乎这应该是存储的内容,并在触发评论等时更新。
您最初可以编写一个PHP脚本来计算和填充“流行度”字段,然后使用触发器在每次发生新事件时更新计数 - 这将在其中进行检查以确保它不会发生。如果用户已有喜欢或评论,请增加它。
答案 2 :(得分:0)
尝试此查询
SELECT
stream_post_id,
count(user_id) AS 'popularity'
FROM
(SELECT
stream_post_id,
user_id
FROM
Stream_Post_Comment
UNION
SELECT
stream_post_id,
user_id
FROM
Stream_Post_Like) tbl
GROUP BY
stream_post_id
希望这有帮助