[MySQL] Ottenere più risultati in un unico campo

Andrea71

Nuovo Utente
4 Dic 2018
3
0
1
Buonasera a tutti,
sono nuovo di questo forum e da poco ho iniziato a lavorare con i database ed a muovere i primi passi con le query.
Ad oggi ho un problemino….ho creato due tabelle, importando dei dati che mi ha fornito un cliente.
Nella prima: record_id, nome, cognome, qualifica, data_inizio, data_fine
Nella seconda record_id, matricola_id, path, file
L'obiettivo è creare una terza tabella con solo alcuni dei campi presenti, ovvero
nome, cognome, qualifica e FILE
Il problema che mi sono trovato ad affrontare, è che l'utente PIPPO ad esempio, ha associati più di un FILE,
quindi mi trovo tanti record PIPPO, qunti sono i file, mente il cliente, mi ha chiesto di avere in output un solo
record e nel campo FILE, visualizzare: pluto.jpg , paperino.txt , minnie.pdf....
Qualcuno ha idea di come si possa fare?
Sono giorni che sto impazzendo!!!
Grazie a tutti anticiapatamente
 

marino51

Utente Attivo
28 Feb 2013
2.927
166
63
Lombardia
la prima tabella ha l'aria di essere una specie di anagrafica con
record_id, nome, cognome, qualifica, data_inizio, data_fine

nella seconda esiste una "matricola_id" che potrebbe essere la matricola della persona e trovare posto nella prima tabella

per cui la prima tabella potrebbe essere strutturata in

tabella1
id
, nome
, cognome
, matricola
, qualifica
, data_inizio
, data_fine

la seconda potrebbe essere strutturata in

tabella2
id
, t1_id
, path
, file

nella tabella2 potresti avere molti record per ciascun t1_id,
usando il tuo esempio e considerato presente il record id=1 nella tabella1
nella tabella2 avresti,

1, 1, pluto.jpg
2, 1, paperino.txt
3, 1, minnie.pdf
....

non dovrebbe servirti una terza tabella perchè puoi applicare una semplice select,

select
t1.nome
, t1.cognome
, t1.matricola
, t1.qualifica
, t2.path
, t2.file
from tabella1 t1
left join tabella2 t2
on t1.id=t2.t1_id

che ti restituisce l'elenco dato dalla join delle tabella1 e tabella2
 

Andrea71

Nuovo Utente
4 Dic 2018
3
0
1
la prima tabella ha l'aria di essere una specie di anagrafica con
record_id, nome, cognome, qualifica, data_inizio, data_fine

nella seconda esiste una "matricola_id" che potrebbe essere la matricola della persona e trovare posto nella prima tabella

per cui la prima tabella potrebbe essere strutturata in

tabella1
id
, nome
, cognome
, matricola
, qualifica
, data_inizio
, data_fine

la seconda potrebbe essere strutturata in

tabella2
id
, t1_id
, path
, file

nella tabella2 potresti avere molti record per ciascun t1_id,
usando il tuo esempio e considerato presente il record id=1 nella tabella1
nella tabella2 avresti,

1, 1, pluto.jpg
2, 1, paperino.txt
3, 1, minnie.pdf
....

non dovrebbe servirti una terza tabella perchè puoi applicare una semplice select,

select
t1.nome
, t1.cognome
, t1.matricola
, t1.qualifica
, t2.path
, t2.file
from tabella1 t1
left join tabella2 t2
on t1.id=t2.t1_id

che ti restituisce l'elenco dato dalla join delle tabella1 e tabella2
Ciao,
intanto grazie per l'aiuto.
Volevo dirti pero che la select che mi indichi, mi restutuisce questi record:
NOME COGN RUOLO MATRIC FILE
Giovanni| Grasso |0162 |003551 | 003552_3.tif
Giovanni| Grasso |0162 |003551 | 003552_2.tif
Giovanni| Grasso| 0162 |003551 | 003552_1.tif
Ciò che serve a me, è avere i tre file, associati all'utente, in un unica cella "FILE" separati da una virgola ed ottenere per ogni persona un solo record.
Le due tabelle su cui lavoro, hanno in comune il campo RECORD_ID (presente in entrambe)

Grazie, buona giornata
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
il sistema delle tabelle indicate da marino51 secondo me è il più adatto, poi è da cercare la select che faccia quello che vuoi, al limite due select la prima ti estrae la anagrafica, la seconda in base all'estratto dell'anagrafica il file, usandi es php potrebbero essere due while associati
 

marino51

Utente Attivo
28 Feb 2013
2.927
166
63
Lombardia
si può ottenere il risultato che desideri, ma il modo per ottenerlo é specifico per il database che stai usando,
posso suggerirti soluzioni per sql server che non sono compatibili con mysql
puoi cercare soluzioni con
"how to concatenate rows in a single column in sql"
 

marino51

Utente Attivo
28 Feb 2013
2.927
166
63
Lombardia
occhio però la atbella fatta così è ridondante, secondo me meglio due tabelle tra loro collegate
il mio é un esempio per indicare che il "desiderio" é ottenibile,

ovvero ho usato la stessa tabella per comodità, ma nessuno vieta che la @tabella t1 all'interno di substring sia una tabella differente, in altre parole all'interno di substring c'é una select a se stante (join) che può "pescare" da qualunque tabella lecita
Codice:
            SELECT ', '+t1.FILENAME  AS [text()]
            FROM @tabella t1
            WHERE t1.MATRIC = t2.MATRIC
 
Ultima modifica: