我正在尝试构建一个过滤器,以便根据某些规格快速找到合适的产品。但是我无法使MySQL运行。现在已经搜寻了一段时间,但找不到类似的问题。我希望你能帮助我。
files = {
"file": (
"new_data.csv",
open("D:/cf_upload-sheet/new_data.csv", "rb"),
"text/csv",
{"Expires": "0"},
)
}
这是MySQL我希望它如何工作。
This is the products table
--------------------
| id | name |
--------------------
| 1 | Product 1 |
| 2 | Product 2 |
| 3 | Product 3 |
--------------------
This is the relation table for the specifications
--------------------------------
| id | specs_id | prod_id |
--------------------------------
| 1 | 1 | 1 |
| 2 | 5 | 1 |
| 3 | 6 | 2 |
| 4 | 9 | 3 |
| 5 | 11 | 2 |
---------------------------------
此示例将不会给出结果
$sql = "SELECT p.id, p.name
FROM products p
JOIN specs s ON p.id = s.prod_id
WHERE s.specs_id = 1
AND s.specs_id = 5
AND s.specs_id = 7
GROUP BY p.id";
这将返回ID为1的产品
答案 0 :(得分:2)
Item_id在您的表中不存在。您还使用了 OR 的 AND 插入,因此没有匹配的条目。没有人可以同时拥有specs_id 2,5和7。
SELECT p.id, p.name
FROM products p
JOIN specs s
ON p.id = s.prod_id
WHERE s.specs_id = 5
OR s.specs_id = 2
OR s.specs_id = 7
GROUP BY p.id;
答案 1 :(得分:1)
您正在寻找OR
或IN
:
SELECT DISTINCT p.id, p.name
FROM products p
JOIN specs s ON p.id = s.prod_id
WHERE s.specs_id IN (1,5);
或
SELECT DISTINCT p.id, p.name
FROM products p
JOIN specs s ON p.id = s.prod_id
WHERE s.specs_id=1 OR s.specs_id=5;
此外,如果您没有聚合函数,请使用DISTINCT
而不是GROUP BY
。
答案 2 :(得分:0)
您可以像先用必需的specs
过滤specs_id
表,然后将结果与products
表联接一样。
select p.id, p.name from
(select * from products p ) p
join (select * from specs where specs_id in (1,5,7)) s
on p.id = s.prod_id
group by p.id