我有4个mysql表如下:
属性:
int id
string attribute
类:
int id
string category
产品:
int id
int category_id (fk categories.id)
string name
...
attribute_category:
int id
int attribute_id (fk attributes.id)
int category_id (fk categories.id)
attribute_product
int id
int attribute_id (fk attributes.id)
int product_id (fk products.id)
string value
产品具有许多属性,但可以具有的属性取决于产品所属的类别。
我希望与product表同时对product_attributes执行crud操作。
创建操作
我可以获得产品所需的属性:
SELECT
attributes.id, attributes.attribute
FROM `attributes`
JOIN
`attribute_category`
ON
attributes.id = attribute_category.attribute_id
WHERE
attribute_category.category_id = 1
编辑操作
编辑时,我需要能够使用attribute_product表连接上表。这个表应该做三件事:
到目前为止我的查询:
SELECT
attributes.id,
attributes.attribute,
attribute_product.value
FROM `attributes`
JOIN
`attribute_category`
ON
attributes.id = attribute_category.attribute_id
LEFT JOIN
`attribute_product`
ON
attributes.id = attribute_product.attribute_id
WHERE
attribute_category.category_id = 1 AND
attribute_product.product_id = 1
现在这个查询满足1和2的要求,但是我不知道我需要做什么来满足第3部分。如果尚未输入product_attribute但应该可用,我希望返回一行,其值为null。在第一个实例中,我认为我没有正确使用我的左连接,而在第二个实例中,通过在我的WHERE子句中声明product_id必须为1,我自动排除了我的空行。
例如需要输出。
attributes.id attributes.attribute attribute_product.value
1 Weight 35.5
2 Height 55.6
3 Colour null
7 Shape Round
9 Manufacturer null
当前输出
attributes.id attributes.attribute attribute_product.value
1 Weight 35.5
2 Height 55.6
7 Shape Round