gpt4 book ai didi

php - 过滤 MySQL 中的项目

转载 作者:行者123 更新时间:2023-11-29 12:01:05 24 4
gpt4 key购买 nike

现在我正在开发一个新闻网站。每条新闻都有一个标签。用户可以通过标签过滤新闻。他有三个字段(所有字段都是可选填写的)

1)文章中至少应有一个标签

2)每篇文章中必须出现的标签

3)文章中不得出现的标签

链接到带有表格的文章的标签

`news_id`|`tag_id`
1 | 2
4 | 1
4 | 4
5 | 1
5 | 5
... | ...

当用户按保存过滤器时,我收到标签 ID。如何使用一个 mysql 查询过滤 news_id's?

现在,我有这个查询

SELECT * FROM `app_news_newstag` GROUP BY `news_id` HAVING `tag_id` IN ('1', '4', '5') AND `tag_id` NOT IN ('2')

我认为它涵盖了第一和第三个字段,但我坚持使用第二个

最佳答案

我建议使用group byhaving,如下所示:

SELECT news_id
FROM `app_news_newstag`
GROUP BY news_id
HAVING sum(tag_id IN ('1', '4', '5')) = 3 AND
sum(tag_id` IN ('2')) = 0;

求和即为匹配数。假设文章上没有重复的标签,那么您可以只计算每篇文章的匹配数。在数字上下文中,MySQL 将 bool 表达式视为 1 表示 true,0 表示 false,这就是它起作用的原因(没有 case)。

第二个条件只是检查标签是否不存在。

注意:如果 id 是数字,则不应为常量使用单引号。用于数字比较的字符串常量具有误导性。

关于php - 过滤 MySQL 中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32365963/

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