1

usersすべてのユーザーに関する情報が記載されたテーブルがあります。次に、posts記事に関する情報user_postsを含むテーブル、最後に次の列を含むテーブルです。

user_id
post_id
...

投稿数が最も多いユーザーのチャートを取得しようとしています。私はこのクエリを行いました:

SELECT u.id as uid、u.name as uname、count(up.id)as up_count FROM users as u JOIN user_posts as up ON up.user_id = u.id ORDER BY vcount DESC LIMIT 25

このクエリは、1人のユーザーとテーブル内のすべての行の総数のみを返しますuser_posts

私は何が間違っているのですか?各ユーザーを公開した記事の数でソートされた25ユーザーのリストを取得する必要があります。

前もって感謝します

4

2 に答える 2

3

関数を使用したため、クエリにはGROUP BY句が必要COUNT()です。

SELECT   u.id as uid, 
         u.name as uname, 
         count(up.id) as up_count 
FROM     users as u 
           LEFT JOIN user_posts as up  
              ON up.user_id = u.id 
GROUP BY u.id, u.name
ORDER BY up_count DESC LIMIT 25

それらをグループ化する必要がありIDます。そうしないと、すべてのレコードの合計カウント結果が1つになります。もう1つ、LEFT JOIN投稿のないユーザーでもスコアが。の結果に表示されるように使用します0

于 2012-09-04T22:42:38.050 に答える
1
SELECT 
    u.id as uid, u.name as uname, count(up.id) as up_count 
FROM users as u 
    JOIN user_posts as up ON up.user_id = u.id 
GROUP BY 
    u.id, u.name
ORDER BY 
    vcount 
DESC LIMIT 25
于 2012-09-04T22:42:23.367 に答える