Visualizzazione dei risultati da 1 a 7 su 7

Discussione: join fra tre tabelle

  1. #1

    join fra tre tabelle

    Sto realizzando un sito per un'associazione calcistica che milita in due categorie/campionati.

    Devo mostrare il calendario degli incontri e i dati necessari sono depositati in tre tabelle: squadre, giornate e calendario.

    Devo fare in modo di unirle insieme perché in calendario ci sono delle chiavi che rimandano sia a squadre che a giornate. In giornate sono elencate singolarmente tutte le giornate di campionato. In squadre ci sono tutte le squadre ovviamente. In calendario una chiave numerica deve richiamare i dati relativi (giorno, mese, anno, ora, minuti) dalla tabella giornata. Mentre in calendario ci sono (fra i tanti) i campi squadra_casa e squadra_ospite che sono due chiavi che dovrebbero richiamare i nomi delle squadre dall'ovvia tabella squadre.
    Infine il tutto è filtrato in base al campo categoria nella tabella calendario (poiché le due categorie della società vengono mostrate in due pagine distinte).

    Ho provato diversi JOIN, ma ottengo sempre o il nome per la squadra di casa o per quella ospite. Attualmente sono arrivato a questo:
    SELECT *
    FROM squadre JOIN (giornate INNER JOIN calendario USING (id_giornate)) ON calendario.casa = squadre.id_squadre
    WHERE giornate.categoria = 1
    ORDER BY giornate.giornata ASC, calendario.id_calendario ASC

    Qualcuno può aiutarmi?

    GRAZIE.

  2. #2
    Scrivi più dettagliatamente la struttura delle tabelle, almeno abbiamo un riferimento.

    [Calendario]
    id (integer)
    titolo (varchar)
    squadra_ospite_id (integer)
    squadra_casa_id (integer)
    ....
    etc, etc..


    Per tutte e 3 le tabelle.
    Almeno capiamo precisamente come fare le JOIN.

  3. #3
    tab calendario:

    id_calendario bigint (primary key - autoincrement)
    id_giornate bigint
    casa int
    ospite int
    golcasa int
    golospite int



    tab giornate:

    id_giornate bigint (priary key - autoincrement)
    categoria int
    giornata int
    ar int (indica se è il girone di andata o ritorno)
    giorno char
    mese char
    anno char
    ora char
    minuti char



    tab squadre

    id_squadre int (primary key - autoincrement)
    categoria int
    nome char
    comune char
    punti int
    pg int (sta per partite giocate)
    pv int (... partite vinte)
    pn int (... partite nulle)
    pp int (.. partite perse)
    gf int (... gol fatti)
    gs int (... gol subiti)

  4. #4
    Scusa (non mi intendo di calcio) che differenza c'è tra calendario e giornate?

    Da quale delle due tabelle vorresti tirare fuori questa lista?

  5. #5
    nemmeno io mi intendo di calcio, ma mi tocca farlo lo stesso...

    comunque: in giornate vengono memorizzati i giorni e l'ora in cui vengono disputate tutte le partite in maniera univoca. mentre in calendario sono elencati tutti i singoli incontri di tutte le giornate, infatti gli incontri di ogni giornata si distinguono da quegli delle altre giornate grazie ad un identificativo che corrisponde all'id_giornate.

    spero di essere stato chiaro.

  6. #6
    Devi fare una doppia JOIN sulla tabella delle squadre tipo:
    codice:
    JOIN squadre AS squadra_casa ON calendario.casa = squadra_casa.id_squadre
    JOIN squadre AS squadra_ospite ON calendario.ospite = squadra_ospite.id_squadre
    Nella SELECT poi devi rinominare i campi
    codice:
    SELECT squadra_casa.nome AS nome_casa, squadra_ospite.nome AS nome_ospite {...}
    Altrimenti i campi omonimi vengono sovrascritti

  7. #7
    Grazie, ora va. Difatti ero riuscito a fare la JOIN, solo che la query non mi restituiva i nomi delle squadre, ma il campo nome risultava vuoto, probabilmente perché non era univoco il suo uso e richiamo: sia casa che ospite hanno il campo nome.
    Ora mi sono più chiare altre proprietà dei database.

    Mille grazie.

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.