Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    22

    [MySql] ragguppare i dati di una sola tabella in una Join uno a molti

    Buongiorno a tutti.
    Chiedo aiuto per capire se è possibile raggruppare i risultati di una join uno a molti i dati ridondanti di una sola tabella. Mi spiego meglio:
    Ho una sitazione di questo tipo:

    codice:
    Tabella Marche:
    
    ====================
    | m_id | marca     |
    ====================
    | 1    | Fiat      |
    | 2    | Ford      |
    | 3    | Citroen   |
    ====================
    
    Tabella Auto:
    
    ===============================
    | a_id | rif_m_id | Nome      |
    ===============================
    | 1    | 1        | Punto     |
    | 2    | 1        | Bravo     |
    | 3    | 2        | Fiesta    |
    | 4    | 2        | Focus     |
    | 5    | 3        | C3        |
    | 6    | 3        | C4        |
    ===============================
    Se faccio: SELECT * from marche join auto where m_id=rif_m_id

    Questo è il risultato:
    codice:
    ==================================================
    | m_id | marca     | a_id | rif_m_id | Nome      |
    ==================================================
    | 1    | Fiat      | 1    | 1        | Punto     |
    | 1    | Fiat      | 2    | 1        | Bravo     |
    | 2    | Ford      | 3    | 2        | Fiesta    |
    | 2    | Ford      | 4    | 2        | Focus     |
    | 3    | Citroen   | 5    | 3        | C3        |
    | 3    | Citroen   | 6    | 3        | C4        |
    ==================================================

    Avere invece una tabella come la seguente, con i risultati della sola prima tabella raggruppati è possibile?

    codice:
     
    
    ==================================================
    | m_id | marca     | a_id | rif_m_id | Nome      |
    ==================================================
    |      |           |      |          |           |
    | 1    | Fiat      | 1    | 1        | Punto     |
    |      |           | 2    | 1        | Bravo     |
    | 2    | Ford      | 3    | 2        | Fiesta    |
    |      |           | 4    | 2        | Focus     |
    | 3    | Citroen   | 5    | 3        | C3        |
    |      |           | 6    | 3        | C4        |
    ==================================================
    Grazie a chi portà aiutarmi.

  2. #2
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Che significa "avere una tabella come la seguente"?
    Ti riferisci all'output della query o a qualcosa che vuoi stampare tu dopo?
    Perché nel primo caso non ha molto senso la tua richiesta.
    Se invece parli di stampa, è sufficiente che tu tenga in memoria l'ultimo valore e stampi il successivo solo quando è diverso, ovviamente mettendo anche un order by sulla query

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    22
    Probabilmente hai ragione.
    pensavo di poter ottenere un recordset con solo la tabella A raggruppata in modo da non dover "sapere" se il prossimo valore è diverso oppure no, ma come dici tu forse la cosa non ha senso.
    Devo lavorare i risultati in php.
    L'order by lo farei su m_id, a_id giusto?

    Intanto che aspettavo una risposta ci ho pensato un po', grazie comunque.

  4. #4
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Io farei una UNION che ti puo dare un risultato che
    si avvicina molto ( forse migliore ) alla richiesta.

    Devi nascondere gli ultimi 2 campi che servono
    esclusivamente all'ordinamento.

    codice:
    SELECT 
    Marche.m_id AS MId, 
    Marche.marca AS Mar, 
    Null AS AId, 
    Null AS AM, 
    Null AS ANo, 
    Marche.m_id AS Or1, 
    Null AS Or2
    FROM 
    Marche
    UNION ALL 
    SELECT 
    Null AS MId, 
    Null AS Mar, 
    Auto.a_id AS AId, 
    Auto.rif_m_id AS AM, 
    Auto.Nome AS ANo, 
    Auto.rif_m_id AS Or1, 
    Auto.a_id AS Or2
    FROM 
    Auto
    ORDER BY 
    Or1, 
    Or2
    ;


    .

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 © 2025 vBulletin Solutions, Inc. All rights reserved.