Ciao a tutti ragazzi,vi spiego il mio problema in italiano e soprattuto con un filo logico : sto realizzando un database abbastanza complesso relativo ad una società di eventi che realizza campionati di calcio a 4.
Essendo che di occupo un pò di tutto,ma nello specifico tocco pochi rami,sto cercando di realizzare il database con le mie forze e fino ad ora,al livello logico nessun problema: le tabelle sono state create e senza che logicamente parlando il sistema fili.
Il problema è un altro: per riuscire a collegare le varie tabelle con MYSQL mi aiuto,essendo non molto pratico di codice SQL,con Access ed il relativo codice da esso generato adattandolo a mysql.
Ora essendo che vorrei capirci meglio e non trascurare il "perchè" questo codice viene generato sto cercando di studiarlo per riuscire a liberarmi di Access e realizzare il codice da me.
Ho realizzato una query per sapere quanti gol ha effettuato X giocatore durante un incontro ben definito.
Nell'allegato trovate lo schema logico delle varie relazioni.
E questo è il relativo codice generato:
SELECT Count(id_gol) AS gol_Eseguiti
FROM squadra AS squadra_A INNER JOIN ((squadra AS squadra_B INNER JOIN partita ON squadra_B.id_squadra = partita.id_squadrab) INNER JOIN (giocatore INNER JOIN gol_fatti ON giocatore.id_giocatore = gol_fatti.id_giocatore) ON partita.id_partita = gol_fatti.id_partita) ON squadra_A.id_squadra = partita.id_squadra
WHERE (((giocatore.nome)="Francesco") AND ((giocatore.cognome)="Pedone"));
Che funge perfettamente su Mysql. Ora la mia domanda è: come ci arriva a creare una doppia parentesi tonda fra il primo inner join e a chiuderla fra gol_fatti.id_partita? Inoltre: esiste la possibilità di avere il medesimo risultato con un codice un pò più semplificativo??
Oltre a questo,se provassi ad unire nello schema E/R la primary Key di squadra_A con giocatore.id_squadra al fine di sapere in che squadra gioca X giocatore,mi restituisce il seguente codice:
SELECT Count(id_gol) AS gol_Eseguiti
FROM squadra AS squadra_A INNER JOIN ((squadra AS squadra_B INNER JOIN partita ON squadra_B.id_squadra = partita.id_squadrab) INNER JOIN (giocatore INNER JOIN gol_fatti ON giocatore.id_giocatore = gol_fatti.id_giocatore) ON partita.id_partita = gol_fatti.id_partita) ON (squadra_A.id_squadra = giocatore.id_squadra) <b>AND</b> (squadra_A.id_squadra = partita.id_squadra)
WHERE (((giocatore.nome)="Francesco") AND ((giocatore.cognome)="Pedone"));
a che serve quel "AND" li? Ci arrivo al fatto che collega le varie tabelle..ma perchè non utilizza un altro INNER JOIN? Vi ringrazio in anticipo e sopratutto per la pazienza ragazzi
Essendo che di occupo un pò di tutto,ma nello specifico tocco pochi rami,sto cercando di realizzare il database con le mie forze e fino ad ora,al livello logico nessun problema: le tabelle sono state create e senza che logicamente parlando il sistema fili.
Il problema è un altro: per riuscire a collegare le varie tabelle con MYSQL mi aiuto,essendo non molto pratico di codice SQL,con Access ed il relativo codice da esso generato adattandolo a mysql.
Ora essendo che vorrei capirci meglio e non trascurare il "perchè" questo codice viene generato sto cercando di studiarlo per riuscire a liberarmi di Access e realizzare il codice da me.
Ho realizzato una query per sapere quanti gol ha effettuato X giocatore durante un incontro ben definito.
Nell'allegato trovate lo schema logico delle varie relazioni.
E questo è il relativo codice generato:
SELECT Count(id_gol) AS gol_Eseguiti
FROM squadra AS squadra_A INNER JOIN ((squadra AS squadra_B INNER JOIN partita ON squadra_B.id_squadra = partita.id_squadrab) INNER JOIN (giocatore INNER JOIN gol_fatti ON giocatore.id_giocatore = gol_fatti.id_giocatore) ON partita.id_partita = gol_fatti.id_partita) ON squadra_A.id_squadra = partita.id_squadra
WHERE (((giocatore.nome)="Francesco") AND ((giocatore.cognome)="Pedone"));
Che funge perfettamente su Mysql. Ora la mia domanda è: come ci arriva a creare una doppia parentesi tonda fra il primo inner join e a chiuderla fra gol_fatti.id_partita? Inoltre: esiste la possibilità di avere il medesimo risultato con un codice un pò più semplificativo??
Oltre a questo,se provassi ad unire nello schema E/R la primary Key di squadra_A con giocatore.id_squadra al fine di sapere in che squadra gioca X giocatore,mi restituisce il seguente codice:
SELECT Count(id_gol) AS gol_Eseguiti
FROM squadra AS squadra_A INNER JOIN ((squadra AS squadra_B INNER JOIN partita ON squadra_B.id_squadra = partita.id_squadrab) INNER JOIN (giocatore INNER JOIN gol_fatti ON giocatore.id_giocatore = gol_fatti.id_giocatore) ON partita.id_partita = gol_fatti.id_partita) ON (squadra_A.id_squadra = giocatore.id_squadra) <b>AND</b> (squadra_A.id_squadra = partita.id_squadra)
WHERE (((giocatore.nome)="Francesco") AND ((giocatore.cognome)="Pedone"));
a che serve quel "AND" li? Ci arrivo al fatto che collega le varie tabelle..ma perchè non utilizza un altro INNER JOIN? Vi ringrazio in anticipo e sopratutto per la pazienza ragazzi