php / mysql: многостолбцовый JOIN результат в 1 строку php

Пожалуйста, рассмотрите эту структуру таблицы MySQL:

table1:
id,name

table2:
table1_id,type, value

Я пытаюсь получить все имена в таблице1 и все соответствующие типы и их средние значения в таблице2. «тип» может быть 1 из 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, что было бы лучшим опытом там?

Спасибо за любую помощь

0

Решение

Вы можете использовать следующую технику для создания сводной таблицы как

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
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]