Newsgroup: it.comp.www.php
Titolo: Problema con query un po complessa

ciao!
Dunque : ho due tabelle,
nella prima ho tutti i prodotti con id, nome, jpg, e quello che chiamo
manufacturers_id  cioč marca
( che č solo un id )
e una seconda tabella con tutte le marche:
coi campi:
manufacturers_id
manufacturers_name
Naturalmente il campo manufacturers_id č quello che relaziona le 2 tabelle.
vorrei stampare NOME, MARCA di tutti i prodotti, solo che se faccio una
semplice query mi stampa NOME e ID_MARCA cioč manufacturers_id
es: T28 25
invece di
T28 ERICSON
dove 25 č l'ID della marca ERICSON.
ho provato cosě ma ho un problema, mi si ferma quando arriva al termine del
numero delle righe della tab delle marche:
"SELECT
products.products_name,products.products_image,products.manufacturers_id,
manufacturers.manufacturers_id,manufacturers.manufacturers_name
FROM products, manufacturers
WHERE products.manufacturers_id = manufacturers.manufacturers_id "
Avete qualche idea? ( sicuramente si :-)
Grazie 1000
                                                                -- Yena --

numero delle righe della tab delle marche:
1. Come, scusa? In che senso??
2. Ma nella tua tabella products ci sono per caso record in cui il
campo manufacturer_id è NULL?

 numero delle righe della tab delle marche:
In effetti la domanda non è molto chiara: potresti spiegarti meglio? La
query proposta da Yena è quella che serve al caso tuo, ma mi hai
incuriosito.
Tieni presente che quando invii una query a un database mySQL tutte le
tabelle indicate nella clausola FROM vengono unite in tutte le possibili
combinazioni. Se per esempio la tabella prodotti contiene cinque record e la
tabella produttori ne contiene tre, la tabella generata dalla query conterrà
5 x 3 = 15 record. Naturalmente non tutti questi quindici record ti andranno
bene, ed ecco entra in gioco l'enunciato SELECT (per selezionare
verticalmente le colonne che ti interessano) e soprattutto la clausola WHERE
(per selezionare orizzontalmente quei record che rispondono ai requisiti:
per esempio i record nei quali il manufatcurer_id è identico nelle due
tabelle unite).
Il problema che poni potrebbe effetivamente presentarsi, come ipotizza Yena,
se qualche campo della tabella manufaturers è NULL, cioè contiene "nessun
valore". Potresti sempre usare una LEFT JOIN per aggirare l'ostacolo, ma non
credo tu abbia davvero bisogno di visualizzare dei record NULL in un
catalogo di telefonini!
Ciao
_China

Nella mia reply ho confuso il mittente originario del thread (Yena) con il
primo che gli ha risposto (fermat). Mi scuso :-)
_China


Grazie China per l'interessamento ma l'errore era nel conto delle
righe che mi sparava fuori,
ora che ho guardato meglio , funziona benissimo
come avevo fatto.
Grazie ancora !!
                                        -- Yena --

                                                                 -- Yena --
Trovo la tua query alquanto strana. Non mi risulta si uniscano tabelle
usando la clausola WHERE, ma piuttosto una JOIN.
SELECT
products.products_name,products.products_image,products.manufacturers_id,
manufacturers.manufacturers_id,manufacturers.manufacturers_name
FROM products inner join manufacturers
ON products.manufacturers_id = manufacturers.manufacturers_id
se puoi vuoi filtrare il risultato mettici anche una WHERE
[mAnNaRo] webmaster di 
www.lepulci.it

products.manufacturers_id = manufacturers.manufacturers_id
È abbastanza diffuso anche l'uso di where per impostare il join tra le
due tabelle, anche perché forse è più sintetico: 
where tabella1.chiaveforesta = tabella2.chiaveprimaria
Il join invece a mio avviso risulta più comodo per le varie sue forme
(left, right eccetera).
Se non ricordo male qualcuno in questo ng aveva chiamato questo
sistema join nel where e il sistema da te suggerito join nel from.
A questo punto qualche esperto potrebbe dirci se uno dei due metodi è
più veloce dell'altro.
M