gpt4 book ai didi

MYSQL - 在过滤特定标签后返回完整的标签集

转载 作者:行者123 更新时间:2023-11-29 18:35:15 25 4
gpt4 key购买 nike

我已经规范化了一个引文表,我有 4 个单独的表,分别涉及引文、作者、引文标签(对引文进行分类的标签)和引文标签(引文可以有多个标签,例如爱、幸福、死亡等)。 70,000 个报价。

quotes表由字段id、quote和authorid组成作者表由字段id和author(作者姓名)组成quotetags 由字段 id 和描述组成(例如 1 -> 幸福,2 -> 钦佩)quotetotags 由 id、quoteid、tagid 外键组成,指向quotes 表和quotetags 表,例如 (1,1,3 ... 2,1,6....3,2,17..etc)

我想通过一系列标签过滤引文..因此,如果我选择幸福、爱情、关系,我想选择至少有一个与之关联的这些标签的引文(以及 ID、引文和作者) )。

现在,当我过滤标签时,我想为每个选定的引用返回所有标签的 GROUP_CONCAT(),而不仅仅是用户想要过滤的标签...所以如果一个引用包含 5 个标签其中之一是幸福,我希望 GROUP_CONCAT() 包含与其关联的所有 5 个标签,而不仅仅是她/他过滤的标签。

这是我的问题。我已经让它工作,它似乎返回适当的引号,但我无法让它列出所有关联的标签。目前它只列出了按 :( 过滤的标签,我认为我需要一个 EXISTS 子句。

到目前为止我已经有了这个。

 SELECT q.*, (SELECT author FROM authors WHERE authors.id = q.authorid) as 
authorid, GROUP_CONCAT(qt.description ) as tags
FROM quotes AS q
LEFT JOIN quotestotags AS qtt ON q.id = qtt.quoteid
LEFT JOIN quotetags AS qt ON qtt.tagid = qt.id
WHERE qt.id IN (40,45,70) // arbitrary list of tagids
GROUP BY q.id
ORDER BY q.id ASC
LIMIT 60, 20

我只是不知道如何让它列出所有标签:(

有人可以帮助我并指出我正确的方向吗?提前致谢。

如果有人可以向我展示如何过滤掉包含作为过滤器传递的所有标签的引用(其想法是将所有关联标签返回到每个引用),我将不胜感激。因此,如果选择“幸福和爱”,那么只会选择那些标有“幸福和爱”的引文。

最佳答案

省略作者 ID(这对于问题来说似乎并不重要):

SELECT q.*, GROUP_CONCAT(qt.description ) as tags
FROM quotes q LEFT JOIN
quotestotags qtt
ON q.id = qtt.quoteid LEFT JOIN
quotetags qt
ON qtt.tagid = qt.id
GROUP BY q.id
HAVING SUM(qt.id IN (40, 45, 70)) > 0
ORDER BY q.id ASC
LIMIT 60, 20

这个想法是使用 HAVING 子句而不是 WHERE 子句来过滤标签。

关于MYSQL - 在过滤特定标签后返回完整的标签集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45363676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com