125 messaggi dal 22 agosto 2001
Ciao a tutti,

sono alle prese con un problemino su una tabella in mysql.
La tabella presenta 2 colonne con tanti record che hanno in molti casi campi uguali. Vorrei poterla "ridurre" concatenando i campi.

La tabella è tipo questa:

TABELLA
email | prodotto
-----------------
email1 | A
email1 | B
email1 | C
email2 | A
email2 | D
email3 | E
email3 | A
email3 | C
ecc..


Vorrei creare una vista che mi dia questo risultato:

RISULTATO QUERY
email | prodotto
-----------------
email1 | A,B,C
email2 | A,D
email3 | E,A,C

Da cui poi partirei per altre elaborazioni.

Ho provato a guardare in giro e penso che le funzioni da usare siano CONCAT() o GROUP_CONCAT() ma non riesco ad usarle, forse è solo un problema di sintassi.

Non voglio creare una tab temporanea, mi servirebbe proprio una vista o cmq una query da lanciare nel codice.

Spero che qualcuno mi sappia dare una mano

Grazie

ciao!
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
esatto, puoi usare GROUP_CONCAT. Nella documentazione trovi un esempio della sintassi da usare.

Nel tuo caso dovresti raggruppare per il campo email ed usare GROUP_CONCAT sul campo prodotto. Così:
SELECT email, GROUP_CONCAT(prodotto SEPARATOR ',') FROM tabella GROUP BY email


In questa query ho esplicitato che voglio usare la virgola come separatore, ma puoi usare qualsiasi altro carattere tu voglia.

Fai attenzione perché il contenuto generato da GROUP_CONCAT potrebbe arrivarti troncato se supera una certa lunghezza che di default è 1Kb. Puoi scoprire qual è questo limite eseguendo questa query:
SHOW VARIABLES LIKE 'group_concat_max_len'

Volendo aumentare il limite, puoi modificare il valore della variabile group_concat_max_len nel my.ini.

ciao,
Moreno
Modificato da BrightSoul il 04 agosto 2013 13.39 -

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.