Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Modelo de conjunto aninhado, conte itens em categorias


Parece uma tarefa para LEFT OUTER JOIN para mim, assim:
SELECT parent.name, COUNT(product.item_id), 
       (select count(*) from Category parent2 
         where parent.lft > parent2.lft
           and parent.rgt < parent2.rgt) as depth
  FROM Category parent
  LEFT OUTER JOIN Category node 
    ON node.lft BETWEEN parent.lft AND parent.rgt
  LEFT OUTER JOIN Item_Category product
    ON node.category_id = product.category_id
 GROUP BY parent.name
 ORDER by node.lft

Assim, você garante que todas as categorias sejam mostradas. Note que não tenho 100% de certeza.

EDIT:Adicionado sub-seleção para profundidade, experimente.

EDIT:vírgula removida