分类MySQL如何查询下级分类(mysql查询下级)
MySQL 的分类表中,有分类的父类(parent_id)字段,一般来说,若父类的parent_id字段值为0,则代表该分类为顶级分类;否则,parent_id字段值不为0,则代表该分类为下级分类,其父类就是parent_id字段值对应的id记录。要查询分类及其所有下级分类,可以使用 MySQL 的递归查询(Recursive Queries)方式解决。
假设MySQL中有分类表category,表结构如下:
“`mysql
CREATE TABLE `category` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL DEFAULT ”,
`parent_id` int(11) NOT NULL DEFAULT ‘0’,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8;
首先,构建一个递归查询函数,帮助获取所有下级分类。MySQL 8.0 官方文档示例版本如下:
```mysqlDELIMITER $$
CREATE FUNCTION `category_children`(p_id INT) RETURNS VARCHAR(1024) READS SQL DATA
BEGIN DECLARE _id, _name VARCHAR(100);
DECLARE _child VARCHAR(1024) DEFAULT '';
DECLARE children_cursor CURSOR FOR SELECT id,name FROM category WHERE parent_id = p_id;
OPEN children_cursor;
child_loop : LOOP FETCH children_cursor INTO _id, _name;
IF done THEN LEAVE child_loop;
END IF;
SELECT CONCAT(_child, ',', _id) INTO _child FROM DUAL;
SET _child = CONCAT(_child, ':', _name);
-- 遍历子节点
SET _child = CONCAT(_child, category_children(_id)); END LOOP;
CLOSE children_cursor;
RETURN _child;
END$$
DELIMITER ;
接下来,就可以使用该函数查询下级分类了。以ID为20为例,查询该分类及所有子分类,可使用SQL语句如下:
“`mysql
SELECT id,name,
SUBSTRING_INDEX(
SUBSTRING_INDEX(
category_children(20), ‘,’, 1),
‘:’, -1
) AS child
FROM category
WHERE id = 20;
在上述语句中,只查询外层一层分类,其子分类可以通过 `SUBSTRING_INDEX()` 函数来截取显示出来,以便实现分类树菜单展示。
最终,MySQL中查询下级分类的步骤主要分为:首先,创建一个递归查询函数;然后,使用构建的SQL函数,用 `SUBSTRING_INDEX()` 函数实现分类树菜单展示。