假设我有以下表格:
id:整数
name:string
id:整数
body:text
id:整数
tag_id:整数
post_id:整数
我如何编写一个查询,按照包含最多数量的以下标签的帖子的顺序选择所有帖子(标签表的名称属性):“Cheese”,“Wine”,“Paris”,“Frace” “,”城市“,”风景“,”艺术“
另请参阅:Need help with sql query to find things tagged with all specified tags(注意:类似,但不重复!)
答案 0 :(得分:4)
与您的关联问题不同,此处未指定您需要匹配所有标记。此查询适用于任何人。
SELECT p.id, p.text, count(tg.id) as TagCount
FROM Posts p
INNER JOIN Taggings tg
ON p.id = tg.post_id
INNER JOIN Tags t
ON tg.tag_id = t.id
WHERE t.name in ('Cheese', 'Wine', 'Paris', 'Frace', 'City', 'Scenic', 'Art')
GROUP BY p.id, p.text
ORDER BY TagCount DESC
答案 1 :(得分:0)
试试这个:
Select p.Id, p.Text, Count(*)
From Posts p
Left Join (Taggings tg Join Tags t
On t.Tag_Id = tg.Tag_Id
And t.name in
('Cheese', 'Wine', 'Paris',
'Frace', 'City', 'Scenic', 'Art'))
On tg.Post_Id = p.Post_Id
Group By p.Id, p.text
Order By Count(*) Desc