1

私はフォーラムを持っており、最も人気のあるユーザーを見つけたいと思っています。最も人気のあるユーザーは、投稿とコメントに対するいいね! の数が最も多く、投稿とコメントの合計数が最も多いことで定義されます。いいね数が最も多い(1 位)、投稿数が多い(2 位)、コメント数が多い (3 位)ユーザーが最も人気があります。次に (2 番目に) 最も人気のあるユーザーにも同じロジックが適用されます。

だから私は3つのテーブルを持っています:

投稿テーブル

id      user_id     likes
1       1           0
2       1           0
3       1           0
4       1           0
5       1           0
6       1           1
7       1           0
8       2           0
9       2           2
10      2           0
11      2           0
12      3           0
13      3           0
14      4           0
15      4           10

コメント表

id      user_id     likes
1       1           0
2       1           1
3       1           1
4       1           0
5       2           0
6       2           2
7       2           1
8       4           1
9       4           0

ユーザー テーブル

id      name
1       John
2       Adam
3       Maggie
4       Steve

いいねの列には、それぞれの投稿 (行) で他のユーザーによって与えられたいいねが含まれます。私は試した:

 SELECT DISTINCT c.id, c.name,
    SUM(a.likes), SUM(b.likes), (SUM(a.likes) + SUM(b.likes)) as popular,
    COUNT(a.id) as mostp, COUNT(b.id) as mostc
    FROM posts as a, comments as b, users as c
    WHERE a.user_id=b.user_id AND a.user_id=c.id AND b.user_id=c.id
    GROUP BY a.user_id, b.user_id ORDER BY popular DESC, mostp DESC, mostc DESC

クエリをテストすると、予想よりも多くのいいね(合計)が得られるため、明らかにこれは機能しません。

ここにライブクエリがあります http://sqlfiddle.com/#!2/08900/3

4

2 に答える 2

1

これを行う方法は次のとおりです

SELECT
  u.id,
  u.name,
  (l.likes + r.likes) As TotalLikes,
  IFNULL(posts,0) AS TotalPosts,
  IFNULL(comments,0) AS TotalComments
FROM users AS u
  LEFT JOIN (SELECT
           user_id,
           IFNULL(SUM(likes),0) as likes,
           COUNT(likes) as posts
         FROM posts
         GROUP BY user_id) AS l
    on l.user_id = u.id
  LEFT JOIN (SELECT
           user_id,
           IFNULL(SUM(likes),0) as likes,
           COUNT(likes) AS comments
         FROM comments
         GROUP BY user_id) AS r
    on r.user_id = u.id
ORDER BY TotalLikes DESc

SQL フィドルのデモ

出力

| ID |   NAME | TOTALLIKES | TOTALPOSTS | TOTALCOMMENTS |
---------------------------------------------------------
|  4 |  Steve |         11 |          2 |             2 |
|  2 |   Adam |          5 |          4 |             3 |
|  1 |   John |          3 |          7 |             4 |
|  3 | Maggie |          0 |          2 |             0 |
于 2013-05-11T18:54:11.903 に答える