Как преобразовать приведенную выше таблицу, чтобы получить результат ниже (php mysql)?
Желаемый вывод
| perf_o | names | gender | age |
--------------------------------------
| 28 | John Doe | male | 38 |
| 26 | mary jane | female | 20 |
Этот дизайн таблицы является довольно глупой настройкой ключ / значение. Это «несколько глупо», потому что эти установки обычно имеют мастер и таблицу подробностей, но здесь мастер таблица денормализованной в таблицу подробностей. Похоже, что для производительности денормализация.
Таким образом, вам нужно использовать подзапрос, чтобы сделать это идеально. Подзапрос генерирует основную таблицу.
SELECT DISTINCT names, perf_o FROM tbl
Это дает одну строку для каждого человека в вашей входной таблице. (Это предполагает, что каждый человек имеет особую ценность perf_o
; Полагаю, это правда, но ты так не сказал.)
Затем вы присоединяете это дважды к таблице подробностей, по одному разу для каждого значения info
,
SELECT master.perf_o, master.names,
gender.d_prov AS gender,
age.d_prov AS age
FROM (
SELECT DISTINCT names, perf_o FROM tbl
) master
LEFT JOIN tbl gender ON gender.perf_o = master.perf_o AND info = 'gender'
LEFT JOIN tbl age ON age.perf_o = master.perf_o AND info = 'age'
Каждый из LEFT JOIN
Операции подбирает один из выбранных вами ключей и связывает его с master
Таблица.
Это кажется сложным, но это сделает что-то разумное для случаев, когда для человека не указан возраст или пол.
Вы представили проблему, которая сложнее, чем обычно, для тех, кто только начинает работать с SQL. пожалуйста пожалуйста не просто вырезать и вставить мой ответ; вместо этого попытайтесь понять это.
Других решений пока нет …