gpt4 book ai didi

连接后,MySQL 查询仅过滤包含特定值的行

转载 作者:搜寻专家 更新时间:2023-10-30 19:53:06 25 4
gpt4 key购买 nike

我正在努力完成某件事,基本上可以归结为:我想检索所有产品并显示该产品所属的所有类别。但是,我只想过滤掉类别 x 和 y 中存在的产品。

所以,这是我的查询:

    SELECT p.id, p.name,GROUP_CONCAT(distinct(pc.category_id) SEPARATOR ", ") as category
FROM products p
LEFT JOIN product_category pc ON p.id = pc.productid
GROUP BY p.id;

效果很好,我得到这样的结果:

p.id | p.name | category
10 | example| 15,16,17
11 | example| 15,20
12 | example| 39,40

显然“15、16、16”是产品所属的类别。但是,现在我想过滤仅包含类别 15 或 16 的产品的结果集。所以我想要获得的结果集是:

p.id | p.name | category
10 | example| 15,16,17
11 | example| 15,20

所以,我尝试在我的 MySQL 语句中添加一个 WHERE,如下所示:

WHERE category IN (15,16)

这适用于过滤,但问题是,在结果集中我看不到该产品还属于哪些其他类别。所以我看到的结果是:

p.id | p.name | category
10 | example| 15,16
11 | example| 15

请注意与期望结果的不同之处在于我只看到过滤后的猫,而不是所有的猫。

我确实明白为什么会这样,因为显然我的结果集中的“类别”列是基于过滤后的值。但是,我不知道如何解决这个问题,也不知道我想要的是否可行。

PS:此查询将在庞大的数据库上运行,因此查询越快越好。

最佳答案

一个(诚然很奇怪)选项是使用 find_in_set关于汇总结果:

SELECT    p.id, 
p.name,
GROUP_CONCAT(DISTINCT(pc.category_id) SEPARATOR ", ") AS category
FROM products p
LEFT JOIN product_category pc ON p.id = pc.productid
GROUP BY p.id
HAVING FIND_IN_SET('15', GROUP_CONCAT (pc.category_id)) > 0 OR
FIND_IN_SET('16', GROUP_CONCAT (pc.category_id)) > 0

关于连接后,MySQL 查询仅过滤包含特定值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30617168/

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