php / mysql: 多列 JOIN 结果到 1 php 行
php / mysql: multi column JOIN result into 1 php row
请考虑这个MySQLtable结构:
table1:
id,name
table2:
table1_id,type, value
我正在尝试获取 table1 中的所有名称以及 table2 中的所有对应类型及其平均值。 "type" 可以是 3 个固定值之一:
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-)table 的一行中列出每个名称和所有 types/average 值,无论类型/平均值是否存在。
所以我需要的是:
name | type1| type2 |type 3|
-----+------+---------------
name1|value1| value2| |
-----+------+-------+------+
name2|value2| | |
-----+------+-------+------+
我的问题:
我应该使用 SQL 还是 php 来修改结果以列出特定名称的所有类型?
如果SQL,怎么样?我的 LEFT OUTER JOIN 方法是否正确?
如果 PHP,那里的最佳做法是什么?
感谢您的帮助
您可以使用以下技术生成枢轴 table as
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
请考虑这个MySQLtable结构:
table1:
id,name
table2:
table1_id,type, value
我正在尝试获取 table1 中的所有名称以及 table2 中的所有对应类型及其平均值。 "type" 可以是 3 个固定值之一:
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-)table 的一行中列出每个名称和所有 types/average 值,无论类型/平均值是否存在。
所以我需要的是:
name | type1| type2 |type 3|
-----+------+---------------
name1|value1| value2| |
-----+------+-------+------+
name2|value2| | |
-----+------+-------+------+
我的问题: 我应该使用 SQL 还是 php 来修改结果以列出特定名称的所有类型?
如果SQL,怎么样?我的 LEFT OUTER JOIN 方法是否正确?
如果 PHP,那里的最佳做法是什么?
感谢您的帮助
您可以使用以下技术生成枢轴 table as
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