Oppure

Loading
30/11/09 17:50
giocala88
Salve ragazzi, ho creato due tabelle in mysql:

mysql > CREATE TABLE giocatore (
-> id_giocatore int(6) NOT NULL auto_increment,
-> nome varchar(25) default ' ',
-> cognome varchar(25) default ' ',
-> data_nascita date default ' 0000-00-00 ',
-> luogo_nascita varchar(25) NOT NULL default ' ',
-> cittadinanza varchar(25) NOT NULL default ' ',
-> peso int(3) NOT NULL default ' 0 ',
-> altezza int(3) NOT NULL default ' 0 ',
-> id_squadra int(5) default ' 0 ',
-> goal_camp int(3) NULL,
-> goal_uefa int(3) NULL,
-> goal_mund int(3) NULL,
-> convocato smallint(1) default ' 0 ',
-> giocate_mund int(3) NOT NULL default ' 0 ',
-> PRIMARY KEY (nome, cognome, data_nascita)
-> );

mysql > CREATE TABLE squadra (
-> id_squadra int(5) NOT NULL auto_increment,
-> nome varchar(25) default ' ',
-> marca varchar(25) default ' ',
-> sponsor varchar(25) default ' ',
-> allenatore varchar(25) default ' ',
-> id_stadio int(3) default ' 0 ',
-> PRIMARY KEY (nome)
-> );
L'interfacciamneto per l'inserimento, modifica e cancellazione ha avuto successo.
Ora però vorrei unire le tabelle associando ad ogni nome e cognome di un giocatore una nome e allenatore della squadra.
So che il comando in mysql per fare ciò è:

SELECT giocatore.nome, giocatore.cognome,
squadra.nome, squadra.allenatore FROM giocatore LEFT JOIN squadra ON
giocatore.id_giocatore=squadra.id_squadra;
e funziona correttamente. Ora però il rpoblema nasce quando devo interfacciare in php la funzione JOIN.
Ho provato a fare [codice PHP]

$sql = "SELECT giocatore.nome, giocatore.cognome,
squadra.nome, squadra.allenatore FROM giocatore LEFT JOIN squadra ON
giocatore.id_giocatore=squadra.id_squadra";
$query_giocatorejoin = @mysql_query($sql) or die (mysql_error());
while($giocatore = my_sql_fetch_array(query_giocatorejoin) {

$nome = $giocatore['giocatore.nome'];
$cognome = $giocatore['giocatore.cognome'];
$allenatore = $squadra['squadra.allenatore'];
echo "'<p>' . $nome "-" $cognome "-" $allenatore "-" . '</p>'";
}

Ma non mi visulizza nulla solo tre zeri " 000 ". 8-|Dove sbaglio?Grazie anticipatamente.
Ultima modifica effettuata da giocala88 30/11/09 17:50
aaa
01/12/09 5:01
pierotofy
Postato originariamente da giocala88:
$nome = $giocatore['giocatore.nome'];
$cognome = $giocatore['giocatore.cognome'];
$allenatore = $squadra['squadra.allenatore'];
echo "'<p>' . $nome "-" $cognome "-" $allenatore "-" . '</p>'";


Quando prelevi i risultati da mysql_fetch_array non serve riscrivere il nome della tabella... cambia in:

$nome = $giocatore['nome'];
$cognome = $giocatore['cognome'];
$allenatore = $giocatore['allenatore'];
echo "'<p>' . $nome "-" $cognome "-" $allenatore "-" . '</p>'";


Riguardati bene la documentazione per questa ultima funzione (mysql_fetch_array), non credo che tu abbia capito bene come funziona... nel tuo codice fai riferimento ad una variabile "$allenatore" che non ho ben capito dove la peschi.

Al posto di usare $giocatore usa una variabile più descrittiva... di solito io chiamo la funzione così:

while($values = mysql_fetch_array($query)) ...

$values conterrà i valori.
Il mio blog: piero.dev
01/12/09 14:24
giocala88
Mi scusi, ma forse non mi sono spiegato bene:
Io dovrei creare un collegamento tra le due tabelle, associando della tabella squadra il nome della squadra al nome e cognome della tabella giocatore.
Difatti in mysql questa funzione è tradotta con

SELECT giocatore.nome, giocatore.cognome, squadra.nome FROM squadra LEFT JOIN giocatore ON squadra.id_squadra = giocatore.id_giocatore;

Ora il mio problema è come faccio a visualizzare la funzione sopra descritta in php??8-|
Grazie...spero ci siamo capiti:)
aaa
01/12/09 14:58
pierotofy
Mai hai provato a modifcare il codice come ti ho descritto?
Il mio blog: piero.dev
01/12/09 15:45
Thejuster
giocala, non fare troppo affidamente alle guide, magari e solo un esempio di illustrazione di una funzione, ma ci sono metodi molto più efficaci appunto quello che ti sta consigliando piero.


$sql = mysql_query("SELECT * FROM giocatore");

while($row = mysql_fetch_array($sql)) {

$sq = mysql_query("SELECT * FROM squadra WHERE id_squadra='$row[id_squadra]';");
$rw = mysql_fetch_array($sq);


//da qui in poi puoi utilizzare entrambe le tabelle 
// row per il giocatore  rw per la squadra


echo "$row[nome] - $row[cognome] - Allenatore: <b>$rw[allenatore]</b><br>";

}





questo e quanto piero intendeva spigarti.
un solo ciclo che racchiude dati di una o piu tabelle in sincronia.
molto piu veloce e ordinato.
mire.forumfree.it/ - Mire Engine
C# UI Designer
01/12/09 15:48
giocala88
Grazie mille..e mi scuso con piero...:asd::asd:
aaa
01/12/09 21:56
pierotofy
questo e quanto piero intendeva spigarti.
un solo ciclo che racchiude dati di una o piu tabelle in sincronia.
molto piu veloce e ordinato.


Assolutamente no, il metodo che hai postato non e' piu' veloce. Anzi.

Non c'e' dubbio che il metodo di TheJuster funziona, ma non e' la miglior via per farlo funzionare. Il codice da te utilizzato causera' molteplici chiamate a mysql_query e mysql_fetch_array (che non sono proprio leggere). Con l'aumentare dei record le performance si faranno sentire.

In questo caso usare le JOIN e' giustissimo ed eri nella giusta via. Ti mancava l'implementazione corretta in PHP.

Partendo dalla tua query: SELECT giocatore.nome, giocatore.cognome, squadra.nome FROM squadra LEFT JOIN giocatore ON squadra.id_squadra = giocatore.id_giocatore;

Intanto bisogna togliere le ambiguita': hai due campi "nome" (uno in giocatore e uno in squadra).

Per questo c'e' la parola AS.

SELECT giocatore.nome AS giocatore_nome, giocatore.cognome AS giocatore_cognome, squadra.nome AS squadra_nome FROM squadra LEFT JOIN giocatore ON squadra.id_squadra = giocatore.id_giocatore;

Il codice sarebbe qualcosa come:

$query = mysql_query("SELECT giocatore.nome AS giocatore_nome, giocatore.cognome AS giocatore_cognome, squadra.nome AS squadra_nome FROM squadra LEFT JOIN giocatore ON squadra.id_squadra = giocatore.id_giocatore",$link);
while($values = mysql_fetch_array($query)){
  echo $values['giocatore_nome'] . " " . $values['squadra_nome'];
//....
}


Ultima modifica effettuata da pierotofy 01/12/09 21:58
Il mio blog: piero.dev
02/12/09 10:10
giocala88
Grazie a tutti ragazzi..Però volevo dirti una cosa piero, il tuo metodo va benissimo solo che mi visualizza tutti i giocatori con la relativa squadra, se io volessi che al selezionare di una squadra mi visualizzi quel determinato giocatore e non gli altri?
dovrei creare un for all'interno del while?
Ciauz:)
aaa