1

初心者はこちら!コメントが別の「コメント」テーブルに保存されている「結果」テーブルから、最もコメントの多い 3 つの結果を選択するクエリを作成しようとしています。

results
 - id  
 - title    
 - body   
 - etc
 - etc

comments
 - id  
 - result_id
 - user_id
 - timestamp
 - comment

したがって、結果からすべてを選択し、results.id と comments.result_id の間の一致数で並べ替える必要がありますが、どこから始めればよいかわかりません。

助けてくれてありがとう、それは大歓迎です!

4

3 に答える 3

2

テストされていませんが、そのようなことができます

SELECT  r.id  ,r.title, r.body
FROM results r INNER JOIN (SELECT result_id, count(id) cnt FROM comments GROUP BY result_id) c
ON r.id = c.result_id
ORDER by c.cnt DESC
于 2012-07-24T15:33:50.407 に答える
1

おそらく次のようなことを試してください:

SELECT COUNT(c.id) AS comment_count FROM results r
LEFT JOIN comments c ON r.id=c.result_id
GROUP BY result_id ORDER BY comment_count DESC LIMIT 3;
于 2012-07-24T15:31:13.823 に答える
1

以下が機能するはずです。

SELECT r.id, COUNT(r.id) AS comment_count 
FROM results r 
INNER JOIN comments c 
ON results.id = c.result_id 
GROUP BY r.id 
ORDER BY comment_count DESC

結果の ID がコメント テーブルから参照された result_id と同じである 2 つのテーブルを結合します。次に、result_id で行をグループ化して、重複を削除します。関数はCOUNT()、グループ化された行を合計し、それらの数を表示します。

次に、生成されたコメント数に基づいて結果を並べ替えます。

LEFT OUTER JOIN同様に使用することもできます。そうすれば、コメントのないすべての結果も得られます。これが必要かどうかは、ニーズによって異なります。

SQL 結合の説明については、"INNER JOIN" と "OUTER JOIN" の違いは何ですか? を参照してください。

于 2012-07-24T15:41:46.003 に答える