gpt4 book ai didi

php - 从过滤器中选择的 MYSQL 查询

转载 作者:行者123 更新时间:2023-11-29 02:16:17 25 4
gpt4 key购买 nike

我正在尝试添加产品过滤器功能。每个产品都可以有任意数量的过滤器。

我的 table 是这样布置的:

row_id products_id filters_id 
1 1 1
2 2 2
3 3 3
4 4 3
5 1 3

因此该表有一个 product_ids 和相应的 filter_ids 的列表。由于这看起来像一个简单的表格,我认为脚本会很简单。但我真的很难理解它。

我得到的查询是:

SELECT p.products_id
, p.products_name
, p.products_short_desc
, p.products_price
, p.products_url
, p.products_image
, p.products_short_desc
, p.contact_pricing
, GROUP_CONCAT(ptc.categories_id) category_id
FROM products p
LEFT
JOIN prod_to_cat ptc
ON ptc.products_id = p.products_id
AND ptc.categories_id IN (3)
WHERE p.products_status = 1
GROUP
BY p.products_id
HAVING COUNT(DISTINCT ptc.categories_id) = 1
ORDER
BY p.products_price

例如,如果只选择了一个过滤器,并且它的 ID 为 3。即使进行了很多调整,它也无法正常工作。这似乎对复杂也很公平,因为我认为会如此简单。

因此,从本质上讲,我试图找出如何使用此表选择所有具有所有匹配 filters_id 的产品?

因此,如果选择了筛选器 1 和 3,我希望生成所有匹配产品的结果,即在表中包含其产品 ID 和相应的 filter_id。在此示例中,它将只返回 products_id 1,如果仅选择过滤器 id 3,它将返回产品 3,4 和 1。这是如何实现的?

最佳答案

这对我来说似乎相当简单:

DROP TABLE IF EXISTS product_filters;

CREATE TABLE product_filters
(product_id INT NOT NULL
,filter_id INT NOT NULL
,PRIMARY KEY(product_id,filter_id)
);

INSERT INTO product_filters VALUES
(1,1),
(2,2),
(3,3),
(4,3),
(1,3);

SELECT product_id
FROM product_filters
WHERE filter_id IN(1,3)
GROUP
BY product_id
HAVING COUNT(*) = 2;
+------------+
| product_id |
+------------+
| 1 |
+------------+

SELECT product_id
FROM product_filters
WHERE filter_id IN(3)
GROUP
BY product_id
HAVING COUNT(*) = 1;
+------------+
| product_id |
+------------+
| 1 |
| 3 |
| 4 |
+------------+

关于php - 从过滤器中选择的 MYSQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39196120/

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