PDA

View Full Version : [MySQL/SQL] trasformazione di una tabella


pendrel
18-05-2014, 12:30
Avrei bisogno dell'aiuto di qualcuno esperto in trasformazioni di tabelle.
Sto cercando di realizzare una stored procedure che mi consenta di effettuare la trasformazione della seguente tabella:

pagina| utente
----------------------
A | 1
A | 5
A | 7
B | 1
C | 1
C | 3
... | ...

da trasformare in:

utente| A | B | C | ...
------------------------------
1 | 1 | 1 | 1 | ...
3 | 0 | 0 | 1 | ...
5 | 1 | 0 | 0 | ...
7 | 1 | 0 | 0 | ...
... ... ... ... ...


I valori delle pagine sono circa 50/100 e gli utenti 1000. Quindi considerato il numero elevato di colonne
non posso creare manualmente la tabella. Il risultato dovrà essere una matrice densa di 1 e 0. La colonna user si potrebbe anche eliminare, ma non è lì il mio problema visto che non riesco a riempire la tabella con gli 0/1, se non con una update per ogni colonna, ne sarebbero 50.

Spero che qualcuno mi sia d'aiuto.

Grazie mille.

minerte
18-05-2014, 12:49
Ma è una procedura che si deve fare una tantum?
Se si una semplice soluzione è questa (pseudo linguaggio in quanto non conosco le store procedure di mysql)
-
for each utenteInCiclo in UTENTE
for each permessoInCiclo in PERMESSO
valorePresente= SELECT count(*) from TABELLA_PERMESSI
update nuovatabella set permessoInCiclo=valorePresente where utente=utenteInCiclo

pendrel
18-05-2014, 13:03
Ma è una procedura che si deve fare una tantum?
Se si una semplice soluzione è questa (pseudo linguaggio in quanto non conosco le store procedure di mysql)
-
for each utenteInCiclo in UTENTE
for each permessoInCiclo in PERMESSO
valorePresente= SELECT count(*) from TABELLA_PERMESSI
update nuovatabella set permessoInCiclo=valorePresente where utente=utenteInCiclo

grazie per la risposta.
Sì è una tantum. Vorrei capire la procedura che mi hai proposto.
Dal tuo consiglio dovrei creare la tabella manualmente e poi effettuare l'update in questo modo con i due cicli for innestati.
Però non mi sono chiare le variabili che hai utilizzato, in particolare il ciclo for "permessoinciclo in PERMESSO"

minerte
18-05-2014, 16:18
for each permessoInCiclo in PERMESSO
o confuso il termine, stando alla tua nomenclature è pagina.
Quindi sostanzialemente sto dicendo
per ogni "pagina" presente in "PAGINE".