按照使用的帖子数量订购标签?

时间:2012-12-24 19:25:06

标签: mysql sql join

我有两个表,一个名为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,但我不确定如何构造查询。

我应该在此查询中添加哪些内容,以便按照每个代码使用的帖子数量成功对结果进行排序?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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