php - Mysql - 从一个表中获取所有特定行,匹配其他表中的条件和关系(如果有)

标签 php mysql sql pdo

我有一个“产品类型属性”表,其中列出了所有可能的产品属性的名称。

在另一个表中,我有给定产品的特定属性的值。

我需要查询数据库以获取特定产品类型的所有属性名称及其值(如果有)以及它们是否没有分配值。

例如

产品类型 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/

相关文章:

mysql - 将两个不同的查询结果添加到一张表中

mysql - 使用 sql 查询重新排序记录(重写为单个查询)

php - centos httpd php版本与php版本命令行不同

php - php请求结束时是否释放所有内存?

php - 从 symfony2 学说集合中加载相关实体

mysql - 使用 FIND_IN_SET 选择记录

Javascript:使用 1 个函数但不同的值设置多个字段的值

php - 将网络表单保存到数据库

php - 如何将答案存储到 MySQL 表

mysql - Mysql减法的奇怪结果