分类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 官方文档示例版本如下:

```mysql
DELIMITER $$
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()` 函数实现分类树菜单展示。

数据运维技术 » 分类MySQL如何查询下级分类(mysql查询下级)