mysql выбирает динамические значения строк как имена столбцов, другой столбец как значение

У меня есть устаревшая таблица с информацией о пользователе (которая все еще активно используется), и я не могу изменить структуру -

id    name       value
------------------------------
0     timezone   Europe/London
0     language   en
0     country    45
0     something  x
1     timezone   Europe/Paris
1     language   fr
1     country    46

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

Мне нужен SQL-запрос, совместимый с MySQL, который возвращал бы -

id    timezone       language    country  something
---------------------------------------------------
0     Europe/London  en          45       x
1     Europe/Paris   fr          46

Я просмотрел различные ответы на stackoverflow о взломе функциональности сводной таблицы в MySQL, и похожи, но ни один из них, похоже, не соответствует этому случаю использования псевдонима имени столбца переменной из уникальных значений строки из столбца той же таблицы. Хотя я мало спал, поэтому все они начинают немного расплываться, заранее извиняюсь.

Самое близкое, что я мог бы найти, это использовать подготовленные операторы https://stackoverflow.com/a/986088/830171, которые сначала получат все возможные/уникальные значения из столбца имени и создадут запрос, который использует CASE WHENи/или несколько вложенных SELECTили JOINдля одних и тех же запросов к таблице.

Альтернативы, которые я могу придумать, заключаются в том, чтобы получить все строки для этого идентификатора пользователя и обработать их в самом приложении в цикле for или попытаться ограничить имена конечным числом и использовать подпрограмму SELECT. с/ ПРИСОЕДИНИТЬс.Однако этот второй вариант не идеален, если будет добавлено новое имя, мне придется вернуться к этому запросу.

Пожалуйста, скажите мне, что я пропустил что-то очевидное

23
задан Community 23 May 2017 в 12:17
поделиться