php/mysql:多列JOIN结果到1个php行


php / mysql: multi column JOIN result into 1 php row

请考虑这个MySQL表结构:

table1:
id,name
table2:
table1_id,type, value

我正在尝试获取表1中的所有名称以及表2中所有对应的类型及其平均值。"类型"可以是三个固定值中的一个:

SELECT table1.name ,
AVG(table2.value) as avgvalue,
FROM table1 as table1 
LEFT OUTER JOIN table2 as table2 ON table1.id=table2.table1_id
GROUP BY table1.name,table2.type

结果:

name | type | avgvalue
-----+------+-------
name1| type1| value1
-----+------+-------
name1| type2| value2
-----+------+-------
name2| type1| value2
-----+------+-------

我的目标是在(HTML-)表中的一行中列出每个名称和所有类型/平均值,而不管是否存在类型/平均数值。

所以我需要的是:

name | type1| type2 |type 3|
-----+------+---------------
name1|value1| value2|      |
-----+------+-------+------+
name2|value2|       |      |
-----+------+-------+------+

我的问题:我应该使用SQL或php来修改结果,以便列出特定名称的所有类型吗?

如果是SQL,怎么做?我的LEFT OUTER JOIN是正确的方式吗?

如果使用PHP,最佳实践是什么?

感谢您的帮助

您可以使用以下技术将数据透视表生成为

select 
t1.name,
max(case when t2.type = 'type1' then t2.value end) as `type1`,
max(case when t2.type = 'type2' then t2.value end) as `type2`,
max(case when t2.type = 'type3' then t2.value end) as `type3`
from table1 t1
left join table2 t2 on t2.table1_id = t1.id
group by t1.name