La cosa stranissima è che ho provato con questa query:
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 AND node.visible = 1
GROUP BY parent.id
ORDER BY parent.lft
che funziona per come dovrebbe con l'esempio di struttura di tabella che ho postato prima, ma non funziona con quella che ho io!!!
E cioè:
Codice PHP:
TABELLA CATEGORIE
+-------------+--------------------------+-----+-----+---------+
| id | nome | lft | rgt | visible |
+-------------+--------------------------+-----+-----+---------+
| 1 | ROOT CAT | 1 | 12 | 1 |
| 2 | SUB CAT 1 (in root cat) | 2 | 11 | 1 |
| 3 | SUB CAT 2 (in sub cat 1) | 7 | 10 | 0 |
| 4 | SUB CAT 3 (in sub cat 2) | 8 | 9 | 1 |
| 5 | SUB CAT 4 (in sub cat 1) | 3 | 6 | 1 |
| 6 | SUB CAT 5 (in sub cat 4) | 4 | 5 | 1 |
+-------------+--------------------------+-----+-----+---------+
TABELLA PRODOTTI
+------------+----------------------+-------------+
| id | name | category_id |
+------------+----------------------+-------------+
| 1 | OGGETTO IN SUB CAT 5 | 6 |
| 2 | OGGETTO IN SUB CAT 3 | 4 |
+------------+----------------------+-------------+
Il risultato che dovrebbe essere:
Codice PHP:
--- 1 ROOT CAT - 1 oggetto
--------- 2 SUB CAT 1 (in root cat) - 1 oggetto
--------------- 5 SUB CAT 4 (in sub cat 1) - 1 oggetto
----------------------- 6 SUB CAT 5 (in sub cat 4) - 1 oggetto
è invece:
Codice PHP:
--- 1 ROOT CAT - 2 oggetti
--------- 2 SUB CAT 1 (in root cat) - 2 oggetti
--------------- 5 SUB CAT 4 (in sub cat 1) - 1 oggetto
----------------------- 6 SUB CAT 5 (in sub cat 4) - 1 oggetto
--------------- 3 SUB CAT 2 (in sub cat 1) - 1 oggetto
----------------------- 4 SUB CAT 3 (in sub cat 2) - 1 oggetto
... non ci sto a capì più nulla!