[MySQL] Ottenere più risultati in un unico campo

Discussione in 'MySQL' iniziata da Andrea71, 4 Dicembre 2018.

  1. Andrea71

    Andrea71 Nuovo Utente

    Registrato:
    4 Dicembre 2018
    Messaggi:
    3
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    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
     
  2. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.268
    Mi Piace Ricevuti:
    112
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    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
     
  3. Andrea71

    Andrea71 Nuovo Utente

    Registrato:
    4 Dicembre 2018
    Messaggi:
    3
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    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
     
  4. borgo italia

    borgo italia Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    4 Febbraio 2008
    Messaggi:
    15.982
    Mi Piace Ricevuti:
    145
    Punteggio:
    63
    Sesso:
    Maschio
    Località:
    PR
    Home Page:
    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
     
  5. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.268
    Mi Piace Ricevuti:
    112
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    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"
     
  6. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.268
    Mi Piace Ricevuti:
    112
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    giusto come esempio con "sql server 2005"
    upload_2018-12-7_10-41-28.png
     
  7. borgo italia

    borgo italia Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    4 Febbraio 2008
    Messaggi:
    15.982
    Mi Piace Ricevuti:
    145
    Punteggio:
    63
    Sesso:
    Maschio
    Località:
    PR
    Home Page:
    ciao
    occhio però la atbella fatta così è ridondante, secondo me meglio due tabelle tra loro collegate
     
  8. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.268
    Mi Piace Ricevuti:
    112
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    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: 7 Dicembre 2018 alle 15:51
Sto caricando...

Condividi questa Pagina