複数タグ検索で一致した数を元に記事をソートしたい
MySQLデータベースに、記事テーブル posts とタグを表す tags、中間テーブルの post_tag の3つのテーブルが有ります。
記事には複数のタグを持ち、タグは複数の記事に属します。
post_tag は post_id, tag_id というカラムでそれぞれをつないでいます。
タグ 1, 2, 3 で検索した時、3つのタグをすべて持っている記事は 3、一致するタグが2つだけの時は 2 となるようなクエリはどのように書いたら良いのでしょうか?
参考までに現状の3つのタグのいずれかを含む記事を得るクエリを掲載しておきます。
SELECT posts.* FROM posts
JOIN post_tag ON posts.id = post_tag.post_id
JOIN tags ON post_tag.tag_id = tags.id
WHERE tags.id IN(1, 2, 3)
GROUP BY posts.id
MySQLのバージョンは 5.5 です。よろしくお願いします。