2011-12-18 13 views
6

devo controllare nei miei prodotti sto vendendo (per lo più console di gioco e giochi)errore mysql nella mia interrogazione

Voglio vedere quali prodotti ha quali categorie e questa è la mia domanda:

select * From products left join products_categories on (product_id=id) ; 
+------+------+------------+-------------+---------- 
| id | name | product_id | category_id | and more 
+------+------+------------+-------------+---------- 
| 4 | Xbox |   4 |   2 | 
| 5 | PS3 |   5 |   2 | 
| 7 | BAD |  NULL |  NULL | 
etc... 
+------+------+------------+-------------+--------- 

qui ho un prodotto (# 7 - BAD) che non voglio vedere da quando ho rimosso la categoria,

Non voglio vedere il prodotto senza categorie?

+0

Si desidera solo vedere '' dei prodotti che hanno una voce corrispondente in 'products_categories'? In tal caso, si desidera un 'INNER JOIN' invece di un' LEFT JOIN'. – grossvogel

risposta

8

Il comando LEFT JOIN è usato per combina righe corrispondenti nulli che sono memorizzati in tabelle correlate Per unire queste tabelle, la tabella unirsi richiedono un campo comune (comunemente chiamato chiave esterna) dalla tabella a sinistra . Questo tipo di join richiede parole chiave ON o USING.

Esempio:

SELECT * 
From products 
LEFT JOIN products_categories ON (product_id=id) 
WHERE product_id IS NOT NULL; 

Oppure si può utilizzare join interno:

Il comando JOIN o INNER JOIN è usato per combina non nullo corrispondenza righe che vengono memorizzati in corrispondenti tabelle Per unire queste tabelle, la tabella di join richiede un campo comune (comunemente chiamato chiave esterna) dalla tabella sinistra. Questo tipo di join richiede parole chiave ON o USING.

Esempio:

SELECT * From products INNER JOIN products_categories ON (product_id=id); 

Ora, mi sento di raccomandare di aggiungere un flag per il prodotto inattivo o attivo, in questo modo non è necessario rimuovere le categorie per un prodotto se è inattivo. In questo modo, se vuoi riattivarlo, devi semplicemente riportare la bandiera su 1 o su qualsiasi altra bandiera che usi.

Esempio:

SELECT * 
FROM products 
INNER JOIN products_categories ON (product_id=id) 
WHERE products.is_active = 1; 
+0

grazie per il suggerimento – fred

+0

siete i benvenuti –

+0

BTW, le parentesi attorno alla clausola ON sono ridondanti. –

Problemi correlati