2

2 つのテーブルがあり、1 つは と呼ばれ、もう 1 つは多対多の関係でTags呼び出されます。にはとPosts_TagsPosts_Tags2 つの列が含まれています。データベースには、ジョイント テーブルの に対応する列も含まれています。postidtagidTagsidtagid

ユーザーに表示するタグ名のリストを、使用回数順に並べて取得したいと思います。この情報を使用して、2 つのテーブルを結合するクエリを作成しました。

SELECT Tags.name FROM `Tags` LEFT JOIN `Posts_Tags` ON Tags.id = Posts_Tags.tagid

Tagsこれにより、タグ名のリストが取得されますが、明らかに、テーブルから純粋にデータを選択する以上のことはできません。ORDER BYどこかに句を追加する必要があることはわかっています(おそらくGROUP BY.

各タグが使用されている投稿の数で結果を正しく並べ替えるには、このクエリに何を追加すればよいですか?

4

2 に答える 2

2

用途Group By各タグの使用回数をカウントします。これは、タグ名が一意であることを前提としています。そうでない場合は、代わりに ID でグループ化する必要があります。

Select
  t.Name,
  Count(*) as TagUse
From
  Tags t
    Left Join
  Post_Tags p
    On t.Id = p.TagID
Group By
  t.Name
Order By
  TagUse Desc
于 2012-12-24T19:27:57.160 に答える
2

投稿で 1 つのタグを 1 回だけ使用できると仮定すると、次のことができます。

SELECT Tags.ID, Tags.name, count(*) as NumPosts
FROM Tags
  LEFT JOIN Posts_Tags ON Tags.id = Posts_Tags.tagid
Group by Tags.ID, Tags.name
Order by 3 desc
于 2012-12-24T19:28:42.290 に答える