Salve a tutti,
sto cercando di approfondire i Nested Sets e le Funzioni Aggregate e mi ritrovo davanti ad un problema stupido che però non riesco a risolvere...
Ho scritto questa semplice query che estrapola dal database tutte le categorie che contengono direttamente o indirettamente (per indirettamente mi riferisco ai prodotti contenuti nelle sottocategorie della categoria, che a rigor di logica sono contenuti anche alla categoria madre relativa) almeno un prodotto mostrando il numero totale di prodotti contenuti in ogni ramo.
Questa è la query che è perfettamente funzionante:
Codice PHP:
SELECT
parent.id,
parent.nome,
COUNT(prodotti.id) AS numProdContenuti
FROM TABELLA_CATEGORIE AS node
INNER JOIN TABELLA_CATEGORIE AS parent ON node.lft BETWEEN parent.lft AND parent.rgt
INNER JOIN TABELLA_PRODOTTI AS prodotti ON node.id = prodotti.category_id
GROUP BY parent.id
ORDER BY node.lft
Ora, il mio problema è che vorrei che la query mi mostri (e quindi ricalcoli il numero dei prodotti in base a questo nuovo criterio) solo le categorie dove il campo "visible" sia 1.
Le ho provate tutte, riuscendo a non mostrare le categorie con "visible" = 0 ma i prodotti contenuti nelle categorie nascoste mi vengono conteggiati lo stesso (e non dovrebbe essere così).
Mi date un aiutino?
Grazie
P.s. Per una maggiore facilità vi posto la struttura delle due tabelle:
Codice PHP:
TABELLA CATEGORIE
+-------------+----------------------+-----+-----+---------+
| id | nome | lft | rgt | visible |
+-------------+----------------------+-----+-----+---------+
| 1 | ELECTRONICS | 1 | 20 | 1 |
| 2 | TELEVISIONS | 2 | 9 | 1 |
| 3 | TUBE | 3 | 4 | 1 |
| 4 | LCD | 5 | 6 | 1 |
| 5 | PLASMA | 7 | 8 | 0 |
| 6 | PORTABLE ELECTRONICS | 10 | 19 | 1 |
| 7 | MP3 PLAYERS | 11 | 14 | 1 |
| 8 | FLASH | 12 | 13 | 1 |
| 9 | CD PLAYERS | 15 | 16 | 1 |
| 10 | 2 WAY RADIOS | 17 | 18 | 1 |
+-------------+----------------------+-----+-----+---------+
TABELLA PRODOTTI
+------------+-------------------+-------------+
| id | name | category_id |
+------------+-------------------+-------------+
| 1 | 20 TV | 3 |
| 2 | 36 TV | 3 |
| 3 | Super-LCD 42 | 4 |
| 4 | Ultra-Plasma 62 | 5 |
| 5 | Value Plasma 38 | 5 |
| 6 | Power-MP3 128mb | 7 |
| 7 | Super-Shuffle 1gb | 8 |
| 8 | Porta CD | 9 |
| 9 | CD To go | 9 |
| 10 | Family Talk 360 | 10 |
+------------+-------------------+-------------+