Mysql 查询父菜单下所有的子菜单,Mysql迭代查询

278 篇文章 1 订阅
44 篇文章 0 订阅
这篇博客介绍了如何使用MySQL查询语句获取菜单的层级关系,包括查询父菜单下的所有子菜单和查询子菜单的所有父菜单。文章提供了具体的SQL查询示例,并展示了数据表结构及部分数据插入操作。内容对于理解和操作菜单层级数据具有参考价值。
摘要由CSDN通过智能技术生成

================================

©Copyright 蕃薯耀 2021-11-27

​​​​​​蕃薯耀的博客_CSDN博客

一、查询父菜单下所有的子菜单


#查询某个父菜单下所有的子菜单,包含该父菜单
#注意:查询有变量,直接在sql查询窗口在第二次查询数据会变少
#参考:https://blog.csdn.net/qq_37493556/article/details/108296542
SELECT
	ID.LEVEL,
	#_ids,
	DATA.* 
FROM
	(
	SELECT
		@ids AS _ids,
		( SELECT @ids := GROUP_CONCAT(id) FROM sys_menu WHERE FIND_IN_SET(parent_id, @ids ) ) AS cids,
		@l := @l + 1 AS LEVEL 
	FROM
		sys_menu,
		( SELECT @ids := 3, @l := 0 ) b  #@ids为输入的参数
	WHERE
		@ids IS NOT NULL 
	) ID,
	sys_menu DATA 
WHERE FIND_IN_SET( DATA.id, ID._ids) 
ORDER BY LEVEL,id;

二、查询某个子菜单所有的[父]菜单(包含该子菜单)

-- 查询某个子菜单所有的[父]菜单(包含该子菜单)
SELECT id,LEVEL,DATA.`title`,DATA.`parent_id` FROM(
	SELECT
	@id AS _id,
	( SELECT @id := parent_id FROM sys_menu WHERE id = @id) AS _pid,
	@l := @l+1 AS LEVEL
	FROM sys_menu,
	(SELECT @id := (15), @l := 0 ) b -- @id为输入的参数
	WHERE @id > 0
) ID, sys_menu DATA -- 表关联
WHERE ID._id = DATA.id
ORDER BY LEVEL DESC

三、数据结构


-- 菜单
CREATE TABLE sys_menu(

	id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
	parent_id BIGINT COMMENT '父菜单id',
	title VARCHAR(50) NOT NULL COMMENT '菜单标题',
	icon VARCHAR(100) NOT NULL COMMENT '菜单目录图标class',
	`type` SMALLINT NOT NULL DEFAULT 1 COMMENT '类型,0表示菜单目录,1表示链接菜单',
	open_type VARCHAR(50) COMMENT '打开类型,目录是空,菜单是:_iframe',
	href VARCHAR(2000) COMMENT '菜单点击链接',
	order_by DOUBLE NOT NULL DEFAULT 100 COMMENT '排序,越小越前,每个目录菜单最好相差为10',
	
	delete_flag SMALLINT NOT NULL DEFAULT 0 COMMENT '是否删除,默认为0表示未删除,1表示删除',
	create_time DATETIME NOT NULL DEFAULT NOW() COMMENT '创建时间',
	create_user BIGINT NOT NULL COMMENT '创建人',
	update_time DATETIME COMMENT '更新时间',
	update_user BIGINT COMMENT '更新人',
	remark VARCHAR(200) COMMENT '备注'
	
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4;


INSERT INTO sys_menu(title,icon,open_type,href,create_user)
VALUES ('菜单1','layui-icon layui-icon-set-fill', NULL, NULL, 1);

INSERT INTO sys_menu(title,icon,open_type,href,create_user)
VALUES ('菜单2','layui-icon layui-icon-set-fill', NULL, NULL, 1);

INSERT INTO sys_menu(title,icon,open_type,href,create_user)
VALUES ('菜单3','layui-icon layui-icon-set-fill', NULL, NULL, 1);

INSERT INTO sys_menu(title,icon,open_type,href,create_user,parent_id)
VALUES ('菜单1.1','layui-icon layui-icon-set-fill', '_iframe', 'https://www.baidu.com/', 1,1);
INSERT INTO sys_menu(title,icon,open_type,href,create_user,parent_id)
VALUES ('菜单1.2','layui-icon layui-icon-set-fill', '_iframe', 'https://www.baidu.com/', 1,1);
INSERT INTO sys_menu(title,icon,open_type,href,create_user,parent_id)
VALUES ('菜单1.3','layui-icon layui-icon-set-fill', '_iframe', 'https://www.baidu.com/', 1,1);
INSERT INTO sys_menu(title,icon,open_type,href,create_user,parent_id)
VALUES ('菜单1.4','layui-icon layui-icon-set-fill', '_iframe', 'https://www.baidu.com/', 1,1);

INSERT INTO sys_menu(title,icon,open_type,href,create_user,parent_id)
VALUES ('菜单2.1','layui-icon layui-icon-set-fill', '_iframe', 'https://www.baidu.com/', 1,2);
INSERT INTO sys_menu(title,icon,open_type,href,create_user,parent_id)
VALUES ('菜单2.2','layui-icon layui-icon-set-fill', '_iframe', 'https://www.baidu.com/', 1,2);
INSERT INTO sys_menu(title,icon,open_type,href,create_user,parent_id)
VALUES ('菜单2.3','layui-icon layui-icon-set-fill', '_iframe', 'https://www.baidu.com/', 1,2);

INSERT INTO sys_menu(title,icon,open_type,href,create_user,parent_id)
VALUES ('菜单3.1','layui-icon layui-icon-set-fill', '_iframe', 'https://www.baidu.com/', 1,3);
INSERT INTO sys_menu(title,icon,open_type,href,create_user,parent_id)
VALUES ('菜单3.2','layui-icon layui-icon-set-fill', '_iframe', 'https://www.baidu.com/', 1,3);
INSERT INTO sys_menu(title,icon,open_type,href,create_user,parent_id)
VALUES ('菜单3.3','layui-icon layui-icon-set-fill', '_iframe', 'https://www.baidu.com/', 1,3);

INSERT INTO sys_menu(title,icon,open_type,href,create_user,parent_id)
VALUES ('菜单3.3.3','layui-icon layui-icon-set-fill', '_iframe', 'https://www.baidu.com/', 1,13);
INSERT INTO sys_menu(title,icon,open_type,href,create_user,parent_id)
VALUES ('菜单3.3.4','layui-icon layui-icon-set-fill', '_iframe', 'https://www.baidu.com/', 1,13);
INSERT INTO sys_menu(title,icon,open_type,href,create_user,parent_id)
VALUES ('菜单3.3.5','layui-icon layui-icon-set-fill', '_iframe', 'https://www.baidu.com/', 1,13);


SELECT * FROM sys_menu l 
ORDER BY l.`order_by` ASC,l.`id` ASC;

(时间宝贵,分享不易,捐赠回馈,^_^)

 

 ================================

©Copyright 蕃薯耀 2021-11-27

​​​​​​蕃薯耀的博客_CSDN博客

数据库迭代查询作业 emp(eno, ename, salary, mgr),其中mgr是员工领导,设计约束:要求领导的工资不能低于他的下属平均工资。(注意,这是一个递归查询) 下面是一些样例数据 CREATE TABLE dbo.Employees ( empid INT NOT NULL PRIMARY KEY, mgrid INT NULL REFERENCES dbo.Employees, empname VARCHAR(25) NOT NULL, salary MONEY NOT NULL, CHECK (empid mgrid) ); INSERT INTO dbo.Employees(empid, mgrid, empname, salary) VALUES(1, NULL, 'David', $10000.00); INSERT INTO dbo.Employees(empid, mgrid, empname, salary) VALUES(2, 1, 'Eitan', $7000.00); INSERT INTO dbo.Employees(empid, mgrid, empname, salary) VALUES(3, 1, 'Ina', $7500.00); INSERT INTO dbo.Employees(empid, mgrid, empname, salary) VALUES(4, 2, 'Seraph', $5000.00); INSERT INTO dbo.Employees(empid, mgrid, empname, salary) VALUES(5, 2, 'Jiru', $5500.00); INSERT INTO dbo.Employees(empid, mgrid, empname, salary) VALUES(6, 2, 'Steve', $4500.00); INSERT INTO dbo.Employees(empid, mgrid, empname, salary) VALUES(7, 3, 'Aaron', $5000.00); INSERT INTO dbo.Employees(empid, mgrid, empname, salary) VALUES(8, 5, 'Lilach', $3500.00); INSERT INTO dbo.Employees(empid, mgrid, empname, salary) VALUES(9, 7, 'Rita', $3000.00); INSERT INTO dbo.Employees(empid, mgrid, empname, salary) VALUES(10, 5, 'Sean', $3000.00); INSERT INTO dbo.Employees(empid, mgrid, empname, salary) VALUES(11, 7, 'Gabriel', $3000.00); INSERT INTO dbo.Employees(empid, mgrid, empname, salary) VALUES(12, 9, 'Emilia' , $2000.00); INSERT INTO dbo.Employees(empid, mgrid, empname, salary) VALUES(13, 9, 'Michael', $2000.00); INSERT INTO dbo.Employees(empid, mgrid, empname, salary) VALUES(14, 9, 'Didi', $1500.00);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值