gpt4 book ai didi

MYSQL查询搜索关系

转载 作者:行者123 更新时间:2023-11-29 02:50:38 26 4
gpt4 key购买 nike

为了清楚起见和这个问题,我将重命名表格,以便每个人都更清楚一点,并解释我想要实现的目标:

有一个输入表单,其中包含返回类别 ID 的选项。如果“产品”有“类别”,我想返回/找到可以说有多个类别(或只有 1 个)的“产品”,并且它的所有类别都在从表单传递的数组中。

产品表

ID     Title
1 Pizza
2 Ice Cream

类别表

ID     Title
1 Baked food
2 Hot food

产品类别表

ID     ProductId     CategoryId
1 1 1
2 1 2

因此,如果我传递 [1,2],查询应该返回 ID 为 1 的产品,因为所有 ProductsCategories 都在请求的数组中,但如果我只传递 1 或 2,查询应该不会返回任何结果。

目前我有以下有效的查询,但出于某种原因,如果我创建第二个产品并创建一个与第一个产品具有相同 CategoryId 的 ProductCategory,则查询返回 null...

 SELECT products.*
FROM products
JOIN products_categories
ON products_categories.product_id= products.id
WHERE products_categories.category_id IN (1, 2)
HAVING COUNT(*) = (select count(*) from products_categories pc
WHERE pc .product_id = products.id)

非常感谢所有帮助!干杯!

最佳答案

为了匹配 IN 子句中的所有值,您只需要另外知道必须在 HAVING 子句中使用的传递类别的数量:

SELECT
p.*,
GROUP_CONCAT(c.title) AS categories
FROM
Products p
INNER JOIN ProductsCategories pc ON pc.productId = p.ID
INNER JOIN Categories c ON c.ID = pc.categoryId
WHERE
pc.categoryId IN (1,2)
GROUP BY
p.id
HAVING
COUNT(DISTINCT pc.categoryId) = 2 -- this is # of unique categories in IN clause

所以如果 IN (1,2) 结果是:

+----+-------+---------------------+
| id | title | categories |
+----+-------+---------------------+
| 1 | Pizza | Baked Food,Hot Food |
+----+-------+---------------------+
1 row in set

如果 IN (1,3) 结果是 Empty set(没有结果)。

关于MYSQL查询搜索关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36443868/

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