Mysql 查詢父菜單下所有的子菜單,Mysql迭代(遞歸)查詢


 

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

©Copyright 蕃薯耀 2021-11-27

https://www.cnblogs.com/fanshuyao/

 

一、查詢父菜單下所有的子菜單

 
#查詢某個父菜單下所有的子菜單,包含該父菜單
#注意:查詢有變量,直接在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

https://www.cnblogs.com/fanshuyao/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM