gpt4 book ai didi

mysql - 按不同分类法中的标签进行选择(AND + OR)

转载 作者:行者123 更新时间:2023-11-29 23:46:09 26 4
gpt4 key购买 nike

页面上有过滤器,用户可以在其中选择任意数量的标签。这些标签按分类法分组。使用这种过滤器时,选定的文章必须至少有一个来自每个选定分类的选定标签。我相信(为了简单起见,我们可以这样说)我们必须通过 AND 运算符在不同分类法之间选择标签,并通过 OR 运算符在一个分类法内的标签中选择标签。

Filter on page: taxonomyes and Tags

我的表结构:

分类法字段:id

标签字段:id、tax_id

文章字段:id

文章标签字段:id、tag_id、article_id

我可以使用什么 MySQL 查询来获取带有这些过滤器的文章?

最佳答案

我已经通过两次查询完成了。

通过过滤器选择,我们可以获得分类法和标签的 ID。
首先 - 我们制作临时表,在其中按分类法对每篇文章的标签进行分组。

CREATE TEMPORARY TABLE IF NOT EXISTS mem_table ( INDEX(article_id) ) ENGINE=MEMORY AS 
(
SELECT articletags.article_id, articletags.tag_id, tags.tax_id
FROM aricletags
LEFT JOIN tags
ON articletags.tag_id=tag.id
WHERE articletags.tag_id IN (sel_tag1_id, sel_tag2_id, sel_tag3_id...)
GROUP BY article_id, tax_id"
);

第二 - 我们按分类在临时表中搜索,每篇文章的行数必须与我们在过滤器中选择的分类组一样多。

SELECT articels.id
FROM articles
INNER JOIN mem_table
ON mem_table.article_id=article.id
WHERE mem_table.tax_id IN (sel_tax1_id, sel_tax2_id, sel_tax3_id...)
GROUP BY article.id
HAVING COUNT(article.id) = sel_taxonomy_count

关于mysql - 按不同分类法中的标签进行选择(AND + OR),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25930604/

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