mysql 使用Sql查询查找具有最多指定标记的内容

t2a7ltrp  于 2022-11-21  发布在  Mysql
关注(0)|答案(2)|浏览(143)

假设我有以下表:
标签
id:整数
名称:字符串

帖子

id:整数
正文:文本

标记

id:整数
tag_id:整数
post_id:整数
我将如何着手编写一个查询,选择所有职位的顺序后,包含最高数量的以下标签(标签表的名称属性):“奶酪”,“葡萄酒”,“巴黎”,“弗雷斯”,“城市”,“风景”,“艺术”
另请参阅:Sql query to find things tagged with all specified tags(注:相似,但不重复!)

fzwojiic

fzwojiic1#

与您的链接问题不同,您没有在此处指定需要匹配所有标签。此查询适用于任何标签。

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
3bygqnnd

3bygqnnd2#

试试这个:

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

相关问题