搜索时,我有如下表:选择所有属性的一个
表:属性
+---------------+-------------+
| attribute_id | name |
+---------------+-------------+
| 1 | color |
| 2 | material |
+---------------+-------------+
表:ATTRIBUTE_VALUES
+---------------------+-----------------+--------------+--------------+
| attribute_value_id | attribute_id | product_id | value |
+---------------------+-----------------+--------------+--------------+
| 1 | 1 | 1 | blue |
| 2 | 2 | 1 | metal |
| 3 | 1 | 2 | red |
| 4 | 2 | 2 | metal |
+---------------------+-----------------+--------------+--------------+
和我有以下查询:
SELECT
p.product_id AS product_id,
p.name AS product_name,
v.value AS attribute_value,
a.attribute_id AS attribute_id,
a.attribute_category_id AS attribute_category_id,
a.name AS attribute_name,
c.name AS attributes_category_name
FROM
products p
LEFT JOIN
attribute_values v USING (product_id)
LEFT JOIN
attributes a USING (attribute_id)
LEFT JOIN
attribute_categories c USING (attribute_category_id)
WHERE
(a.name = 'color' AND v.value = 'red')
该查询的问题是:当产品匹配WHERE-clausule时,我需要所有属性。
所以我得到是这样的:我只得到'颜色'属性,但正如你所看到的,具体的产品也有'材料'属性。
所以,当我搜索红色的产品时,我还想要该特定产品的其他属性(材质=金属)。
将两个条件移动到各自的JOIN – Strawberry
我想我找到了解决方案,我将它作为答案发布。你可以检查一下吗? – yesterday
我相信你的标准不符合你想要达到的标准。你可能想分裂到他们所属的连接处 –