搜索時,我有如下表:選擇所有屬性的一個
表:屬性
+---------------+-------------+
| 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
我相信你的標準不符合你想要達到的標準。你可能想分裂到他們所屬的連接處 –