2015-04-05 48 views
0

請考慮這個MySQL表結構:PHP/MySQL的:多列聯接的結果爲1個PHP行

table1: 
id,name 

table2: 
table1_id,type, value 

我試圖得到表2表1中的所有名稱和所有相應類型和它們的平均值。 「類型」可以是3個固定值1:

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,如何?我的左外連接是否正確?

如果PHP,那麼最好的做法是什麼?

感謝所有幫助

回答

1

您可以使用以下方法生成的數據透視表作爲

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 
+0

親愛Abhik,我不知道有條件的,這正是我需要的。非常感謝你! – user1840267 2015-04-05 13:54:25