PDA

View Full Version : [php] Usare le join, ma vista l'ora non ci riesco...


utrecht
29-09-2003, 21:42
Credo si possa realizzare con una join una relazione tra 2 tabelle (voi direte: studiare sembra troppo difficile, eh?) ma mi affido alla clemenza del forum...

Supponiamo di avere una prima tabella tipo:
ID | nome | cognome| eta
------------------------------------
e i suoi vari records
1 | .... | ... |
2 | .... | ... |
3 | ... | ... |

ed un'altra tabella cosė fatta:
ID | id_nome | Descrizione | Autore | Testo
----------------------------------------------------
1 | 1 | ... |
2 | 3 | ... |

E' possibile fare un'unica query che mi permette di prelevare dalla seconda tabella, utilizzando id_nome, i dati relativi al corrispondente record della prima?
Spiegazione poco chiara??
In pratica utilizzando id_nome, vorrei stampare i dati della seconda tabella che si riferiscono alla persona della prima tabella il cui ID=id_nome...

Vista l'ora una domanda stupida come questa me la passate? ;-)
Grazie!!

cionci
30-09-2003, 10:29
SELECT Tab1.*
FROM Tab1, Tab2
WHERE Tab1.ID = Tab2.id_nome;

oppure

SELECT Tab1.*
FROM Tab1, Tab2
WHERE Tab1.ID IN (SELECT Tab2.id_nome FROM Tab2);

Queste due possono dare anche risultati leggermente diversi (nella seconda non ci sono ripetizioni), la seconda potrebbe essere pių veloce nel caso i record in Tab2 siano pochi e i record in Tab1 tanti.

Altrimenit c'č il JOIN che č probabilmente pių performante della prima:

SELECT Tab1.* FROM Tab1 INNER JOIN Tab2 ON Tab1.ID = Tab2.id_nome;

utrecht
30-09-2003, 16:39
....sempre pių difficile ora..
- DB MySql -

Nell situazione precedente posso anche stampare prima i dati della prima tabella e poi recupeare quelli della seconda?
Nel senso... con un mysql_fetch_array recupero quanto mi serve dalla prima e poi posso fare anche un mysql_fetch_array sulla seconda tabella?
grazie!

P.S. Tu penserai... provare a farlo no?

cionci
30-09-2003, 19:02
Originariamente inviato da utrecht
P.S. Tu penserai... provare a farlo no?
A parte quello... Su MySQL 4.0.x non funziona la seconda query...

Perchč recuperare i dati separatamente se puoi farlo con una sola query ?

utrecht
30-09-2003, 21:39
ehm...:(:( allora non c'ho capito una mazza...
il fatto č che non riesco a stampare a video i record della tabella2... dopo la query non utilizzo mysql_fetch_array per recuperare i valori di tab2?

Scusate l'ignoranza!

cionci
30-09-2003, 21:55
Vuoi recuperare quelli della prima, quelli della seconda o entrambi ?

Per entrambi:

SELECT *
FROM Tab1, Tab2
WHERE Tab1.ID = Tab2.id_nome;

Fai la scansione con mysql_fetch_array dei dati della prima tabella (attenzione che i campi che presenti sia in tab1 che tab2 sono preceduti dal nome della tabella per essere distinti...ad es. Tab1.ID e Tab2.ID)...

Poi fai: mysql_data_seek($res, 0);

Ed ora fai la scansione sempre con mysql_fetch_array dei dati della seconda tabella...

utrecht
01-10-2003, 07:42
Gentilissimo!!
In effetti ero partito con l'aver bisogno dei dati della seconda ma poi ho voluto provare a fare qulacosa in pių...

cionci
01-10-2003, 08:04
Nessun problema...l'importante č che tu ci sia riuscito ;)

utrecht
01-10-2003, 09:47
Fai la scansione con mysql_fetch_array dei dati della prima tabella (attenzione che i campi che presenti sia in tab1 che tab2 sono preceduti dal nome della tabella per essere distinti...ad es. Tab1.ID e Tab2.ID)...

ehm... tipo...

while ($row = mysql_fetch_array ($result)) {
echo "id: ".Tab1.$row[ "id"]. "<br>\n";
echo "cognome: ".Tab1.$row[ "cognome"]. "<br>\n";
echo "fullname: ".Tab1.$row[ "nome"]. "<br>\n";
echo "Tel: ".Tab1.$row[ "telefono"]. "<hr>\n";
}

cionci
01-10-2003, 09:56
Mettendo che solo il campo ID sia presente in entrambe le tabelle...cosė:

while ($row = mysql_fetch_array ($result)) {
echo "id: ".$row[ "Tab1.ID"]. "<br>\n";
echo "cognome: ".$row[ "cognome"]. "<br>\n";
echo "fullname: ".$row[ "nome"]. "<br>\n";
echo "Tel: ".$row[ "telefono"]. "<hr>\n";
}