如何从MySQL的三个表中获取数据?
我有三个表:产品名称、参数名称和某些产品的参数值: 产品如何从MySQL的三个表中获取数据?,mysql,sql,Mysql,Sql,我有三个表:产品名称、参数名称和某些产品的参数值: 产品 +-------+-------------+ | id | name | +-------+-------------+ | 1 | A100 | +-------+-------------+ | 2 | B250 | +-------+-------------+ +-------+-------------+ | id | name |
+-------+-------------+
| id | name |
+-------+-------------+
| 1 | A100 |
+-------+-------------+
| 2 | B250 |
+-------+-------------+
+-------+-------------+
| id | name |
+-------+-------------+
| 1 | width |
+-------+-------------+
| 2 | color |
+-------+-------------+
+-------+-----------+-----------+-----------+
| id | product | param | value |
+-------+-----------+-----------+-----------+
| 1 | 1 | 1 | 120 |
+-------+-----------+-----------+-----------+
| 2 | 1 | 2 | white |
+-------+-----------+-----------+-----------+
| 3 | 2 | 1 | 275 |
+-------+-----------+-----------+-----------+
| 4 | 2 | 2 | black |
+-------+-----------+-----------+-----------+
参数
+-------+-------------+
| id | name |
+-------+-------------+
| 1 | A100 |
+-------+-------------+
| 2 | B250 |
+-------+-------------+
+-------+-------------+
| id | name |
+-------+-------------+
| 1 | width |
+-------+-------------+
| 2 | color |
+-------+-------------+
+-------+-----------+-----------+-----------+
| id | product | param | value |
+-------+-----------+-----------+-----------+
| 1 | 1 | 1 | 120 |
+-------+-----------+-----------+-----------+
| 2 | 1 | 2 | white |
+-------+-----------+-----------+-----------+
| 3 | 2 | 1 | 275 |
+-------+-----------+-----------+-----------+
| 4 | 2 | 2 | black |
+-------+-----------+-----------+-----------+
paramsofproducts
+-------+-------------+
| id | name |
+-------+-------------+
| 1 | A100 |
+-------+-------------+
| 2 | B250 |
+-------+-------------+
+-------+-------------+
| id | name |
+-------+-------------+
| 1 | width |
+-------+-------------+
| 2 | color |
+-------+-------------+
+-------+-----------+-----------+-----------+
| id | product | param | value |
+-------+-----------+-----------+-----------+
| 1 | 1 | 1 | 120 |
+-------+-----------+-----------+-----------+
| 2 | 1 | 2 | white |
+-------+-----------+-----------+-----------+
| 3 | 2 | 1 | 275 |
+-------+-----------+-----------+-----------+
| 4 | 2 | 2 | black |
+-------+-----------+-----------+-----------+
如何通过一次查询得到该表(所有产品+参数作为列)?我不能用JOIN做这件事
+-------+----------+-----------+-----------+
| id | name | width | color |
+-------+----------+-----------+-----------+
| 1 | A100 | 120 | white |
+-------+----------+-----------+-----------+
| 2 | B250 | 275 | black |
+-------+----------+-----------+-----------+
我无法提供您想要的结果,但您的结果中是否有JSON可能是一种解决方法:
SELECT products.id, products.name, CONCAT('[{',GROUP_CONCAT('"',REPLACE(params.name, '"', '\\"'),'":"', REPLACE(paramsofproducts.value, '"', '\\"'),'"'),'}]') as params
FROM paramsofproducts
LEFT JOIN products ON products.id = paramsofproducts.product
LEFT JOIN params ON params.id = paramsofproducts.param
GROUP BY products.name
结果:
id | name | params
1 | A100 | [{"width":"120","color":"white"}]
2 | B250 | [{"width":"275","color":"black"}]
编辑:转义“您可以构造透视表查询,但我的首选项(尤其是属性[
params
]的数量未知时)只是返回一个分组有序的结果,并处理表示层/应用程序级代码中的格式设置。此外,paramsofproducts
表中的id列可能毫无意义-我们不要对常见问题进行升级,为什么不能使用连接来实现这一点?您需要转义一些引号以获得有效的JSON在所有情况下。谢谢,这是个好主意,但我不能按参数对这个表进行排序。因此,我必须获取数据并在PHP中创建一个排序数组。