sql >> Base de Datos >  >> RDS >> Mysql

Modelo de conjunto anidado, contar elementos en categorías

Me parece una tarea para LEFT OUTER JOIN, así:

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

De este modo, se asegura de que se muestren todas las categorías. Tenga en cuenta que no estoy 100% seguro.

EDITAR:Se agregó una subselección para la profundidad, pruébalo.

EDITAR:coma eliminada