PHP/MySQL : multi column JOIN result into 1 php row

标签 php mysql left-join outer-join

请考虑这个 MySQL 表结构:

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-) 表的一行中列出每个名称和所有类型/平均值,无论类型/平均值是否存在。

所以我需要的是这样的:

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

关于PHP/MySQL : multi column JOIN result into 1 php row,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29455450/

相关文章:

javascript - 由于ajax代码而导致404错误?

php - 在 MySql 中选择匹配一对多关系右侧的行

php - mysql日文字符显示不正确

mysql - 如何使用 Select 将数组分配给 MySql 变量

mysql - 无法检索左连接上的内容

mysql - MySQL:如果未满足第二轮条件,则删除匹配行的JOIN

php - CodeIgniter:在 Controller 中加载 Controller

javascript - 位于跨度内的每一行文本的响应式文本突出显示

php - mysql自动自增是否有可能意外偏移

left-join - PowerBI 自然左外连接问题与右表中已删除的行有关