需要sql查询帮助来查找具有最多指定标签的内容

时间:2010-10-06 19:40:58

标签: sql mysql ruby-on-rails tags tagging

假设我有以下表格:

标记

id:整数
name:string

帖子

id:整数
body:text

的Tagging

id:整数
tag_id:整数
post_id:整数

我如何编写一个查询,按照包含最多数量的以下标签的帖子的顺序选择所有帖子(标签表的名称属性):“Cheese”,“Wine”,“Paris”,“Frace” “,”城市“,”风景“,”艺术“

另请参阅:Need help with sql query to find things tagged with all specified tags(注意:类似,但不重复!)

2 个答案:

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