Mysql中的热门产品

时间:2013-03-14 04:48:48

标签: mysql sql select sum

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

3 个答案:

答案 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;

SQL Fiddle Demo

这会给你:

| 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

希望这有帮助