佳木斯湛栽影视文化发展公司

主頁 > 知識(shí)庫 > mysql 遞歸查找菜單節(jié)點(diǎn)的所有子節(jié)點(diǎn)的方法

mysql 遞歸查找菜單節(jié)點(diǎn)的所有子節(jié)點(diǎn)的方法

熱門標(biāo)簽:地方門戶網(wǎng)站 百度競價(jià)排名 鐵路電話系統(tǒng) Linux服務(wù)器 AI電銷 服務(wù)外包 呼叫中心市場需求 網(wǎng)站排名優(yōu)化

背景

項(xiàng)目中遇到一個(gè)需求,要求查處菜單節(jié)點(diǎn)的所有節(jié)點(diǎn),在網(wǎng)上查了一下,大多數(shù)的方法用到了存儲(chǔ)過程,由于線上環(huán)境不能隨便添加存儲(chǔ)過程,

因此在這里采用類似遞歸的方法對菜單的所有子節(jié)點(diǎn)進(jìn)行查詢。

準(zhǔn)備

創(chuàng)建menu表:

CREATE TABLE `menu` (
 `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '菜單id',
 `parent_id` int(11) DEFAULT NULL COMMENT '父節(jié)點(diǎn)id',
 `menu_name` varchar(128) DEFAULT NULL COMMENT '菜單名稱',
 `menu_url` varchar(128) DEFAULT '' COMMENT '菜單路徑',
 `status` tinyint(3) DEFAULT '1' COMMENT '菜單狀態(tài) 1-有效;0-無效',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12212 DEFAULT CHARSET=utf8;

插入數(shù)據(jù):

INSERT INTO `menu` VALUES ('0', null, '菜單0', ' ', '1');
INSERT INTO `menu` VALUES ('1', '0', '菜單1', '', '1');
INSERT INTO `menu` VALUES ('11', '1', '菜單11', '', '1');
INSERT INTO `menu` VALUES ('12', '1', '菜單12', '', '1');
INSERT INTO `menu` VALUES ('13', '1', '菜單13', '', '1');
INSERT INTO `menu` VALUES ('111', '11', '菜單111', '', '1');
INSERT INTO `menu` VALUES ('121', '12', '菜單121', '', '1');
INSERT INTO `menu` VALUES ('122', '12', '菜單122', '', '1');
INSERT INTO `menu` VALUES ('1221', '122', '菜單1221', '', '1');
INSERT INTO `menu` VALUES ('1222', '122', '菜單1222', '', '1');
INSERT INTO `menu` VALUES ('12211', '1222', '菜單12211', '', '1');

得到的目錄結(jié)構(gòu)如下圖所示:

查詢

先貼出sql語句:

比如,要查詢菜單節(jié)點(diǎn)12的所有子節(jié)點(diǎn),則查處的結(jié)果為:

分析

首先分析from后面的語句,根據(jù)parent_id和id 排序,并將要查詢的菜單節(jié)點(diǎn)當(dāng)做變量,from后面的結(jié)果為

接下來看if(express1,express2,express3)條件語句,if語句類似三目運(yùn)算符,當(dāng)exprss1成立時(shí),執(zhí)行express2,否則執(zhí)行express3;

FIND_IN_SET(str,strlist),str 要查詢的字符串,strlist 字段名 參數(shù)以”,”分隔 如 (1,2,6,8),查詢字段(strlist)中包含(str)的結(jié)果,返回結(jié)果為null或記錄

如果parent_id 在@pid中,則將@pid 里面再加上parent_id,按行依次執(zhí)行,執(zhí)行過程如下表所示:

這時(shí),顯示的id就是菜單id為12的所有子節(jié)點(diǎn)id

到此這篇關(guān)于mysql 遞歸查找菜單節(jié)點(diǎn)的所有子節(jié)點(diǎn)的文章就介紹到這了,更多相關(guān)mysql 遞歸查找菜單節(jié)點(diǎn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Mysql臟頁flush及收縮表空間原理解析
  • 推薦幾款MySQL相關(guān)工具
  • 淺析MySQL的lru鏈表
  • MySQL的查詢緩存和Buffer Pool
  • 淺析MySQL的基數(shù)統(tǒng)計(jì)
  • MySQL的表空間是什么
  • MySQL慢查詢?nèi)绾味ㄎ辉斀?/li>
  • MySQL的Flush-List和臟頁的落盤機(jī)制

標(biāo)簽:銅川 崇左 仙桃 黃山 湖南 湘潭 衡水 蘭州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《mysql 遞歸查找菜單節(jié)點(diǎn)的所有子節(jié)點(diǎn)的方法》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    大宁县| 海林市| 宁强县| 会泽县| 冀州市| 左权县| 临西县| 嘉禾县| 理塘县| 千阳县| 化州市| 康保县| 固始县| 克山县| 威远县| 万荣县| 上蔡县| 鹤峰县| 比如县| 明水县| 高邑县| 保定市| 宁蒗| 拜城县| 旅游| 皋兰县| 晴隆县| 景德镇市| 上蔡县| 柳河县| 曲麻莱县| 赤壁市| 团风县| 温泉县| 井冈山市| 深水埗区| 长沙县| 鲜城| 崇礼县| 泰州市| 南丰县|