这里是文章模块栏目内容页
mysql查询父子菜单(mybatis父子查询)

导读:在网站开发中,菜单是一个必不可少的部分,而父子菜单的查询也是一个常见的需求。本文将介绍如何使用MySQL查询父子菜单,并给出详细的示例。

一、创建表结构

我们需要创建一个menu表,包含id、name、parent_id三个字段,其中id为自增主键,parent_id为0表示该菜单为一级菜单,否则表示该菜单为某一级菜单的子菜单。

CREATE TABLE `menu` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(255) NOT NULL,

`parent_id` int(11) NOT NULL DEFAULT '0',

PRIMARY KEY (`id`)

);

二、插入数据

我们需要插入一些测试数据,以便进行查询。

INSERT INTO `menu` (`id`, `name`, `parent_id`) VALUES

(1, '菜单1', 0),

(2, '菜单2', 0),

(3, '菜单3', 0),

(4, '菜单1-1', 1),

(5, '菜单1-2', 1),

(6, '菜单2-1', 2),

(7, '菜单2-2', 2),

(8, '菜单1-1-1', 4),

(9, '菜单1-1-2', 4),

(10, '菜单2-1-1', 6);

三、查询父子菜单

我们可以使用MySQL的递归查询功能来查询父子菜单。具体实现如下:

WITH RECURSIVE cte AS (

SELECT id, name, parent_id, 1 as level

FROM menu

WHERE parent_id = 0

UNION ALL

SELECT m.id, m.name, m.parent_id, c.level + 1

FROM menu m

INNER JOIN cte c ON m.parent_id = c.id

)

SELECT id, name, parent_id, level

FROM cte

ORDER BY id;

以上查询语句使用了CTE(公共表表达式)和递归查询,首先查询出所有parent_id为0的菜单,然后通过INNER JOIN和UNION ALL递归查询所有的子菜单,并将结果按照id排序输出。

四、总结

本文介绍了如何使用MySQL查询父子菜单,通过递归查询和公共表表达式的方式,可以轻松实现这一功能。在实际开发中,我们可以根据需要进行修改和优化,以满足不同的需求。