1

stream_post の「人気」を判断するために使用したいテーブルが 2 つあります。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 回だけカウントされます。たとえば、投稿にコメントして気に入った場合、「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 に答える