Пожалуйста, рассмотрите эту структуру таблицы 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, что было бы лучшим опытом там?
Спасибо за любую помощь
Вы можете использовать следующую технику для создания сводной таблицы как
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
Других решений пока нет …