1

我有两个表,我想使用它们来确定 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”的人气得分。

4

3 回答 3

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;

SQL 小提琴演示

这会给你:

| STREAM_POST_ID | POPULARITY |
-------------------------------
|              1 |          1 |
|              2 |          3 |
|              3 |          2 |
于 2013-03-14T04:52:12.007 回答
0

似乎这应该是存储的东西,并在触发评论或喜欢时更新。

您可以编写一个 PHP 脚本来最初计算和填充“流行度”字段,然后使用触发器在每次发生新情况时更新计数 - 这将在其中进行检查以确保它不会增加它如果用户已经有一个喜欢或评论。

于 2013-03-14T04:52:17.967 回答
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

希望这可以帮助

于 2013-03-14T04:53:00.920 回答