我不知道从哪里开始!
我有一个 product
表和一个 product_attributes
表。每个产品可以有多个属性。
如果我们只使用 2 个属性来保持简单(id 1 = 尺寸,id 2 = 颜色),product_attributes
表如下所示:
id product_id attribute_id value
======================================
1 1 1 10
2 1 2 Red
3 1 1 12
4 1 2 Red
5 2 1 10
6 2 2 Blue
这里我们有 2 种产品,第一种有 2 种尺寸(10 和 12),均为红色。第二个是蓝色 10 号。
我想查找尺寸等于 (10 OR 12) AND 颜色为红色的所有产品。
SELECT * FROM product p INNER JOIN product_attribute a ON a.product_id = p.id WHERE (a.value = '10' OR a.value = '12') AND (a.value = 'red')
上面的内容显然行不通,但给出了我想要的东西的想法。我很确定我需要在这里的某个地方进行计数(点击次数 = 2),但我不知道从哪里开始。
感谢任何帮助。
最佳答案
这样的事情应该有效:
SELECT *
FROM product p
WHERE EXISTS (SELECT *
FROM product_attribute pa1
WHERE pa1.product_id = p.id
AND pa1.value in ('10', '12'))
AND EXISTS (SELECT *
FROM product_attribute pa2
WHERE pa2.product_id = p.id
AND pa2.value = 'Red')
@SalmanA 提出的问题仍然适用。
关于MySQL - 多个字段必须为 true 的 SELECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35768516/