MYSQL递归
查询商品分类分布
WITH RECURSIVE category_tree AS (SELECTid, NAME, parent_id, 0 AS LEVEL,CAST(NAME AS CHAR(1000)) AS PATHFROM categoriesWHERE is_delete = 0 AND STATUS=1 AND (parent_id = 0 OR parent_id IS NULL)UNION ALLSELECTc.id, c.name, c.parent_id, ct.level + 1,CONCAT(ct.path, ' > ', c.name) AS PATHFROM categories cINNER JOIN category_tree ct ON c.parent_id = ct.idWHERE c.is_delete = 0 AND STATUS=1),leaf_categories AS (SELECT ct.*FROM category_tree ct)SELECTlc.path AS NAME,COUNT(p.id) AS VALUE,lc.level AS LEVELFROM leaf_categories lcLEFT JOIN products p ON lc.id = p.category_id AND p.is_delete = 0 AND STATUS=1GROUP BY lc.id, lc.name, lc.path, lc.levelHAVING VALUE >0ORDER BY VALUE DESC
结果
如果只需要查看叶子节点你只需要
选择parent_id不为当前表中任何id的分类,即最底层的分类
leaf_categories AS (SELECT ct.*FROM category_tree ctWHERE NOT EXISTS (SELECT 1 FROM categories cWHERE c.parent_id = ct.id AND c.is_delete = 0 AND STATUS=1))