我有一个“产品类型属性”表,其中列出了所有可能的产品属性的名称。
在另一个表中,我有给定产品的特定属性的值。
我需要查询数据库以获取特定产品类型的所有属性名称及其值(如果有)以及它们是否没有分配值。
例如
产品类型 1:T 恤
产品类型2:海报
ATTRIBUTES
ID | PRODUCT_TYPE_ID | ATTRIBUTE NAME
1 | 1 | Size
2 | 1 | Colour
3 | 1 | Style
4 | 2 | Print Type
5 | 2 | Paper Type
6 | 2 | Paper Size
在保存这些属性值(也将其链接到特定产品)的“product_attributes”表中,我有:
产品1:男士T恤
产品2:大海报
PRODUCT_ATTRIBUTES
ID | PRODUCT_ID | ATTRIBUTE_ID | VALUE
1 | 1 | 1 | Large
2 | 1 | 2 | Blue
3 | 1 | 3 | Mens
4 | 2 | 4 | Screen print
我想要的结果:
返回产品类型的所有属性,即使“打印类型”是为该特定产品分配值的唯一属性。
ID | PRODUCT_ID | ATTRIBUTE_ID | ATTRIBUTE_NAME | VALUE
1 | 2 | 4 | Print type | Screen print
2 | 2 | 5 | Paper type |
3 | 2 | 6 | Paper size |
我尝试了各种 JOIN,但到目前为止还没有得到我想要的。以下返回其他产品的值,而不是我需要的特定产品。
"SELECT
pa.value AS value,
pa.product_id AS product_id,
ptal.id AS attribute_id,
ptal.name AS attribute_name
FROM product_type_attribute_labels ptal
LEFT OUTER JOIN product_attributes pa ON ptal.id = pa.product_type_attribute_id
WHERE ptal.product_type_id = :ptid
GROUP BY ptal.id"
最佳答案
从我现在所掌握的情况来看,以下查询已经可以提供一些帮助
select a.id,pa.id,ATTRIBUTE_ID,`ATTRIBUTE NAME`,value from attributes a
join product_attributes pa on a.id=pa.ATTRIBUTE_ID
where product_id = 2
相应地更改product_id
检查这个sqlfiddle
关于php - Mysql - 从一个表中获取所有特定行,匹配其他表中的条件和关系(如果有),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34385819/