Ho una tabella retaggio delle informazioni utente (che è ancora in uso attivo) e non posso cambiare la struttura del -mysql selezionare valori di riga dinamici come nomi di colonna, un'altra colonna come valore
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
fuso orario/lingua/paese ecc sono solo esempi di nomi, possono essere variabile/non esiste un elenco finito diverso unica sulle righe di quella colonna
ho bisogno di una query SQL compatibile con MySQL che sarebbe tornato -
id timezone language country something
---------------------------------------------------
0 Europe/London en 45 x
1 Europe/Paris fr 46
Ho esaminato varie risposte sullo stackoverflow attorno alle funzionalità della tabella pivot di hacking in MySQL e simili, ma nessuno di essi sembra corrispondere al caso in cui si utilizza l'alias del nome di colonna variabile da valori di riga univoci da una colonna della stessa tabella. Anche se ho dormito poco, tutti cominciano a diventare un po 'sfocati, ci scusiamo in anticipo.
più vicino che ho trovato potrebbe essere quella di utilizzare le istruzioni preparate https://stackoverflow.com/a/986088/830171 che prima ottenere tutti i possibili valori univoci/dalla colonna nome e costruire una query che utilizza CASE WHEN
, e/o multipla sub SELECT
o JOIN
sulle stesse query di tabella.
Le alternative che posso pensare sono di ottenere tutte le righe per quell'id utente e elaborarle nell'applicazione stessa in un ciclo for oppure tentare di limitare i nomi a un numero finito e utilizzare sub-SELECT
s/JOIN
s. Tuttavia, questa seconda opzione non è l'ideale se viene aggiunto un nuovo nome, dovrei rivisitare questa query.
Ti prego, dimmi che ho perso qualcosa ovvio
Avete davvero bisogno che questo sia espresso in 'sql' o la post-elaborazione sarebbe sufficiente con il vostro linguaggio di programmazione preferito? Se hai bisogno di unirti contro i tuoi dati derattati, allora una vista/proc potrebbe essere il trucco. – bluevector
Sì, per ora manterrò il pasticcio a livello di applicazione - otterrò tutte le righe per quell'id utente e passerò il ciclo sopra mettendo i dati in un array associativo. Volevo solo controllare che fosse l'unica buona opzione. Ancora molto utile avere il metodo SQL per migrazioni e report one-off. – gingerCodeNinja