Newsgroup: it.comp.www.php
Titolo: JOIN con MySql

Ho un quesito, prima di impazzire (ma probabilmente sono io la bestia)
Ho due tabelle, tab1 e tab2, indicizzate ambedue con un indice primario ID.
In queste due tabelle esiste un campo comune (oltre all'ID) che si chiama
id_cliente: la tab1 ha 60 records, la tab2 ha un solo record. In comune
hanno l'id_cliente=57.
Io voglio estrarre tutti i record dalla tab1 e tutti i record dalla tab2,
quindi utilizzo:
$sql="SELECT * FROM $tab1,$tab2";
$query = mysql_query($sql, $link);
Dopodichč:
while($rigo=mysql_fetch_array($query)){
Stampo tutti i campi che mi occorre vedere, ovvero 6 campi della tab1 e due
campi della tab2.
I due campi dell'unico record della tab2, perň, mi vengono riproposti su
ogni riga che stampo, e non č ciň che voglio: io voglio che vengano stampati
solo in corrispondenza dell'unico (per ora) record presente su entrambe le
tabelle.
Devo agire a livello di SQL (con qualche tipo di join diverso) o č il fetch
che deve essere messo a posto ?
Vi ringrazio se mi date una mano, Carlo.


modifica la query cosě:
SELECT * FROM $tab1, $tab2 WHERE $tab1.id_cliente AND $tab2.id_cliente
In questo modo ti tira fuori i clienti che hanno id_cliente uguali.
Ciao

 
manca la condizione di join, ovvero:
select * from tab1,tab2 where tab1.id_cliente=tab2.id_cliente
anche se, a dire il vero, se i campi hanno realmente lo stesso nome la 
condizione dovrebbe essere implicita.
ciao
Alesi_27

 Ciao
ciao
Alesi_27

 condizione dovrebbe essere implicita.
in che mondo sql?
quale dbms dovrebbe dedurre i join dalle tabelle dalla loro struttura?
e soprattutto quale join realizzerebbe in automatico left right o inner?
Ciao Gianfranzo
-- 
ICQ#: 21258924 Nick Gianfranzo
Home page 
http://www.gianfranzo.it
Gianfranzo è contro la guerra
"dopo tutto, gli angeli non sono altro che dei volatili" D. Pennac

 ha scritto nel messaggio
news:bls428$fj5vm$1...@ID-201944.news.uni-berlin.de...

Mi spiego meglio, perchè non ho stato spiegato bene.... Non mi serve
estrarre SOLO quei records che hanno un campo uguale.
La trafila è questa, per farla con un esempio:
- appendo dei record alla tab1
- se succede una certa cosa, allora appendo un record alla tab2, con un
id_cliente identico a quello appena appeso alla tab1
- voglio vedere TUTTI i record di tab1 e di tab2, riga per riga, estraendo
solo certi campi, ma se il record appeso in tab1 NON HA un corrispondente in
tab2, allora voglio che i campi estratti da tab2 siano riempiti di zeri...
In sostanza devo poter vedere se un certo tizio ha fatto o no una certa
cosa, in base a quanto è stato scritto sulle tabelle.
Posso ottenere un'estrazione simile dalle due tabelle con una join?
...O forse è sull'istruzione mysql_fetch_array() che devo lavorare?
Grazie ancora, Carlo.

 e soprattutto quale join realizzerebbe in automatico left right o inner?
non saprei, reminescenze del corso di Basi di dati.
Si diceva che in assenza di ambiguità, se due campi di 2 tabelle hanno 
lo stesso nome, in presenza di join si assume (se non specificato) che 
il join avvenga sui campi con lo stesso nome.
Ho provato ora con mysql e giustamente non funziona, però può darsi che 
sia una mancanza del dbms. Può darsi che un dbms che rispetti lo 
standard sql92 riconosca quello che dico.
Infine potrei anche sbagliarmi, andrò a rivedere le dispense del corso.
ciao
Alesi_27

 standard sql92 riconosca quello che dico.
non c'è alcun motivo per cui, se non esplicitamente indicate le 
"relazioni" tra le tabelle il DBMS possa assumere dei join tra i dati, 
che poi alcuni DBMS possano favorire automatismi tipo quelli che hai 
descritto, dipende solo dal produttore del DB.
a Carlo Magno :) serve una cosa di questo tipo:
SELECT tblA.campox, tblB.campoY,.......
FROM tblA LEFT JOIN tblB ON tblA.campox = tblB.campoy
al posto dei puntini i campi che ti interessa vedere e tblA.campox e
tblB.campoy sono le chiavi da mettere in relazione


 Ciao Gianfranzo
Ciao
Alesi_27