gpt4 book ai didi

关于多个过滤器的 MySQL 过滤器查询

转载 作者:行者123 更新时间:2023-11-29 07:03:51 24 4
gpt4 key购买 nike

我会尝试以最简单的形式阐述我的问题。我正在创建一个电子商务网站,并尝试为搜索结果设置过滤器。一切都很好,直到我遇到了以下问题。当我尝试按 id 分组时,我会丢失规范值的所有其他外键,如果我删除分组依据,我会得到大量结果,每个结果都包含该值的自己的外键。 (我在每篇文章中加入了各自的规范值)。因此,我的问题是如何过滤所有这些规范 ID?

我的查询(翻译和简化)如下:

select * from article
left join article_specification on article_specification.fk_articles=article.id
where (fk_specification_value=172 or fk_specification_value=175 or fk_specification_value=184)
group by id order by date desc

通过运行此查询,我得到 1 个结果(因此是分组依据),但是如果我不分组,我实际上无法对该结果集执行任何操作。如果我在查询中将 ORS 更改为 ANDS,我什么也得不到,因为只有 1 个值。这就是我问题的根源。预先感谢,如果我的问题措辞有点不好,我很抱歉。

最佳答案

如果您想要满足所有规范的文章,您可以这样做:

select a.*
from article a join
article_specification ars
on ars.fk_articles = a.id
where ars.fk_specification_value in (172, 175, 184)
group by a.id
having count(distinct ars.fk_specification_value) = 3
order by a.date desc;

注意:一般来说,我不鼓励将 select *group by 一起使用。在这种情况下,这是可以的,因为 a.id (可能)是 article 中的主键。事实上,ANSI 标准支持这种group by 的使用。然而,解释标准中的语言需要理解什么是“函数依赖”。

如果您想要满足任何规范的文章,您可以使用上面的查询,而不使用having子句。然而,存在更合适:

select a.*
from article a
where exists (select 1
from article_specification ars
where ars.fk_articles = a.id and
ars.fk_specification_value in (172, 175, 184)
);

关于关于多个过滤器的 MySQL 过滤器查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42473148/

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