我有两个表,一个名为Tags
,另一个名为Posts_Tags
,用于多对多关系。 Posts_Tags
包含两列,postid
和tagid
。 Tags
数据库还包含id
列,该列对应于联合表中的tagid
。
我想获得要显示给用户的标签名称列表,按其使用次数排序。使用这些信息,我构建了一个将两个表连接在一起的查询:
SELECT Tags.name FROM `Tags` LEFT JOIN `Posts_Tags` ON Tags.id = Posts_Tags.tagid
这给我一个标签名称列表,但显然,除了仅仅从Tags
表中选择数据之外,它没有什么用处。我知道我需要在某处添加ORDER BY
子句(可能还有GROUP BY
,但我不确定如何构造查询。
我应该在此查询中添加哪些内容,以便按照每个代码使用的帖子数量成功对结果进行排序?
答案 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