mysql wybierz dynamiczne wartości wierszy jako nazwy kolumn, inna kolumna jako wartość
Mam starszą tabelę informacji o użytkowniku (która nadal jest aktywna) i nie mogę zmienić struktury -
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
strefa czasowa / język / kraj itd. są tylko przykładami nazw, mogą być zmienne / nie ma skończonej listy innej niż unikalna w wierszach tej kolumny
Potrzebuję zapytania SQL zgodnego z MySQL, które zwróci -
id timezone language country something
---------------------------------------------------
0 Europe/London en 45 x
1 Europe/Paris fr 46
Przejrzałem różne odpowiedzi na temat stackoverflow wokół hackowania funkcjonalności tabeli Pivot w MySQL i podobne, ale żaden z nich nie wydaje się pasować do tego przypadku używania zmiennych aliasów nazw kolumn z unikalnych wartości wierszy z kolumny tej samej tabeli. Mimo, że mało spałem, wszyscy zaczynają się trochę rozmazywać, przepraszając z góry.
Najbliższe, jakie mógłbym znaleźć, to użycie przygotowanych oświadczeńhttps://stackoverflow.com/a/986088/830171 który najpierw uzyskałby wszystkie możliwe / unikalne wartości z kolumny nazwy i zbudował zapytanie, które używaCASE WHEN
i / lub wiele podSELECT
lubJOIN
na tych samych zapytaniach tabelowych.
Alternatywy, które mogę sobie wyobrazić, to pobranie wszystkich wierszy dla tego identyfikatora użytkownika i przetworzenie ich w samej aplikacji w pętli for lub próba ograniczenia nazw do skończonej ilości i użycie podrzędnychSELECT
s /JOIN
s. Jednak ta druga opcja nie jest idealna, jeśli dodana zostanie nowa nazwa, musiałbym ponownie sprawdzić to zapytanie.
Proszę mi powiedzieć, że przegapiłem coś oczywistego