2

我有两张表,一张称为Tags,另一张称为Posts_Tags多对多关系。Posts_Tags包含两列,postidtagidTags数据库还包含一个列id,它对应tagid于联合表中的 。

我想获取要向用户显示的标签名称列表,按使用次数排序。使用这些信息,我构建了一个将两个表连接在一起的查询:

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

假设一个标签只能在帖子上使用一次,您可以执行以下操作:

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 回答