Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    19

    [MYSQL] Accorpare più risultati in uno solo

    Ciao a tutti, vengo al dunque.

    Ho 2 tabelle con una relazione 1:N

    La prima TABELLA semplificando è di questo tipo:

    ID_post
    titolo
    testo

    La seconda invece contiene dei campi aggiuntivi

    ID_field
    ID_post
    field_name
    field_value

    In poche parole la seconda tabella può contenere dei campi aggiuntivi (N campi) differenti per ogni POST.

    Ammettiamo che un post abbia 3 campi aggiuntivi quando eseguo la Query logicamente mi restituisce 3 risultati che differiscono solo per field_name e fiel_value.

    Esiste una query o un modo (ho pensato a creare una tabella temporanea) in cui riesco a farmi restituire un solo risultato in cui ho come nome del campo <- field_name e il suo valore<- field_value.

    grazie in anticipo.

  2. #2
    fa' un esempio concreto, pls

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    19
    Cerco di spiegare meglio.

    Tabella POST

    ID_post | titolo | testo
    1 | mio_titolo | mio_testo

    Tabella FIELD

    ID_field | ID_post | field_name | field_value
    1 | 1 | selezione | SI
    2 | 1 | archivio | NO
    3 | 1 | tipologia | fotografia


    Facendo la query con una JOIN mi resistuisce logicamente

    ID_post | titolo | testo | field_name | field_value
    1 | mio_titolo | mio_testo | selezione | SI
    1 | mio_titolo | mio_testo | archivio | NO
    1 | mio_titolo | mio_testo | tipologia | fotografia


    Io invece vorrei ottenere questo
    ID_post | titolo | testo | selezione | archivio | tipologia
    1 | mio_titolo | mio_testo | SI | NO | fotografia


    Spero si capisca, non si visualizzano le spaziature.

  4. #4
    si può fare, ma per avere una struttura della tabella di uscita completamente dinamica c'è da programmare parecchio. la cosa ovviamente diventa molto più facile se le colonne di uscita sono fisse (ad sesempio, come da tuo post, se in uscita hai solo ID_post | titolo | testo | selezione | archivio | tipologia).

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    codice:
    select p.id_post,
    max(case when f.field_name='selezione' then field_value else null end) as selezione,
    max(case when f.field_name='archivio' then field_value else null end) as archivio,
    max(case when f.field_name='tipologia' then field_value else null end) as tipologia
    from post p
    inner join field as f
    using (id_post)
    group by id_post
    Come ti ha scritto optime se conosci a priori le colonne ti ho scritto la soluzione, altrimenti devi gestire la cosa dinamicamente.

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    19
    Grazie per la velocità delle risposte!

    Con maniera dinamica cosa intendete? Creo una tabella temporanea con PHP e poi la popolo?
    Ho paura che sia un po' pesantuccio, voi cosa ne pensate?

    il mio vero problema non è tanto nel recupero e utilizzo dei dati che con 2 query riesco a popolare 1 array con tutto.

    il problema è che non riesco a tirare fuori una query che per esempio mi filtri tutti i POST della tipologia->fotografia ma che mi restituisca anche gli altri eventuali FIELD come archivio e selezione e non un unico risultato con tipologia = fotografia

  7. #7
    non mi è chiara questa cosa della selezione tipologia=foto, estraendo anche gli altri. rifa' un esempio per il mio povero unico neurone rimasto

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    19
    Allora in 2 credo che facciamo 2 neuroni


    Tabella POST

    ID_post | titolo | testo
    1 | mio_titolo | mio_testo
    2 | mio_titolo_2 | mio_testo_2
    3 | mio_titolo_3 | mio_testo_3


    Tabella FIELD

    ID_field | ID_post | field_name | field_value
    1 | 1 | selezione | SI
    2 | 1 | archivio | NO
    3 | 1 | tipologia | fotografia

    4 | 2 | selezione | SI
    5 | 2 | archivio | NO
    6 | 2 | tipologia | Rendering

    7| 3 | selezione | SI
    8 | 3 | archivio | NO
    9 | 3 | tipologia | fotografia

    Facendo una JOIN tra le 2 tabelle devo tirare fuori i POST dell tipologia FOTOGRAFIA ma devo ottenere anche i dati realtivi a selezione e archivio che fanno riferimento a quel POST

  9. #9
    quindi come deve essere il risultato?

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    19
    Uh scusa...

    ID_post | titolo | testo | field_name | field_value
    1 | mio_titolo | mio_testo | selezione | SI
    1 | mio_titolo | mio_testo | archivio | NO
    1 | mio_titolo | mio_testo | tipologia | fotografia
    3 | mio_titolo_3 | mio_testo_3 | selezione | SI
    3 | mio_titolo_3 | mio_testo_3 | archivio | NO
    3 | mio_titolo_3 | mio_testo_3 | tipologia | fotografia

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.