【MySQL】 関連テーブルの件数でソートする


A(記事)テーブルとB(いいね)テーブルがあったとして
いいねされた件数で記事をソートする方法をメモ。

方法は色々あると思うのですがとりあえずこんな感じで作ってみました。

SELECT A.id,like_count FROM a A
LEFT JOIN (
SELECT a_id,count(*) like_count 
FROM b
GROUP BY a_id
) B ON A.id = B.wall_id
ORDER BY like_count DESC

ポイントはLEFT JOIN中でselectしているところですね。
BのテーブルにてAのテーブルのidでグループ化し
「like_count」としていいねの件数を抽出しています。
その後、「order by 」にて「like_count」で抽出しています。

また、6行目にてselectしたテーブルの別名をBとして設定しています。
この別名の設定をしないと下記のエラーが出るのでご注意ください。

Every derived table must have its own alias

分かると大したことないけど、やろうとするとパッと思いだせない。
もう年ですな。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です