Извлечение другой таблицы с данными из значений строк другой таблицы MySQL переполнение стека

введите описание изображения здесь

Как преобразовать приведенную выше таблицу, чтобы получить результат ниже (php mysql)?

Желаемый вывод

| perf_o | names      | gender | age |
--------------------------------------
| 28     |  John Doe  |  male  | 38  |
| 26     |  mary jane | female | 20  |

-2

Решение

Этот дизайн таблицы является довольно глупой настройкой ключ / значение. Это «несколько глупо», потому что эти установки обычно имеют мастер и таблицу подробностей, но здесь мастер таблица денормализованной в таблицу подробностей. Похоже, что для производительности денормализация.

Таким образом, вам нужно использовать подзапрос, чтобы сделать это идеально. Подзапрос генерирует основную таблицу.

                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. пожалуйста пожалуйста не просто вырезать и вставить мой ответ; вместо этого попытайтесь понять это.

1

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector