欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql實(shí)現(xiàn)connect by start with方式

 更新時(shí)間:2024年12月19日 16:16:52   作者:Mars'Ares  
本文介紹了MySQL中實(shí)現(xiàn)層級(jí)查詢的幾種方法,并分享了一種使用變量循環(huán)賦值的方式,通過(guò)實(shí)驗(yàn)驗(yàn)證了該方法的有效性

前言

1、mysql沒(méi)有層級(jí)查詢方法 而 oracle通過(guò)connect by start with語(yǔ)法可以實(shí)現(xiàn)層級(jí)查詢

2、mysql實(shí)現(xiàn)層級(jí)查詢的方式很多,有使用存儲(chǔ)過(guò)程函數(shù)嵌套調(diào)用亦有使用臨時(shí)表進(jìn)行層級(jí)查詢

3、本文使用一種變量循環(huán)賦值方式進(jìn)行,可以套用模版

實(shí)驗(yàn)

-- 創(chuàng)建測(cè)試表
-- DROP TABLE IF EXISTS `test_tree`;
CREATE TABLE `test_tree` (
  `id` varchar(10) DEFAULT NULL,
  `name` varchar(10) DEFAULT NULL,
  `pId` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 創(chuàng)建測(cè)試數(shù)據(jù)(根節(jié)點(diǎn)默認(rèn)-1)
INSERT INTO `test_tree` VALUES ('1', '中國(guó)', '-1');
INSERT INTO `test_tree` VALUES ('2', '福建省', '1');
INSERT INTO `test_tree` VALUES ('3', '海南省', '1');
INSERT INTO `test_tree` VALUES ('4', '泉州市', '2');
INSERT INTO `test_tree` VALUES ('5', '福州市', '2');
INSERT INTO `test_tree` VALUES ('6', '泉港區(qū)', '4');
INSERT INTO `test_tree` VALUES ('7', '惠安縣', '4');
-- 模版 表名代替test_tree  用id替換以下id 用pid替換以下 用其他從屬字段替換name
SELECT
 name,
 id,
 pid,
 @le:= IF (pid = -1 ,0,IF( LOCATE( CONCAT('|',pid,':'),@pathlevel) > 0,SUBSTRING_INDEX( SUBSTRING_INDEX(@pathlevel,CONCAT('|',pid,':'),-1),'|',1) +1,@le+1) ) levels,
 @pathlevel:= CONCAT(@pathlevel,'|',id,':', @le ,'|') pathlevel,
 @pathnodes:= IF( pid =-1,',root', CONCAT_WS(',',IF( LOCATE( CONCAT('|',pid,':'),@pathall) > 0 ,SUBSTRING_INDEX( SUBSTRING_INDEX(@pathall,CONCAT('|',pid,':'),-1),'|',1),@pathnodes ) ,pid ) )paths,
 @pathall:=CONCAT(@pathall,'|',id,':', @pathnodes ,'|') pathall 
FROM test_tree, 
(
 SELECT 
 @le:=0,
 @pathlevel:='', 
 @pathall:='',
 @pathnodes:=''
)  vv
ORDER BY pid,id
 
-- 結(jié)合instr(paths,'想要查所有子集的父級(jí)id')>0 驗(yàn)證
SELECT
name,
id,
pid,
levels,
paths
FROM (
	SELECT
	 name,
	 id,
	 pid,
	 @le:= IF (pid = -1 ,0,IF( LOCATE( CONCAT('|',pid,':'),@pathlevel) > 0,SUBSTRING_INDEX( SUBSTRING_INDEX(@pathlevel,CONCAT('|',pid,':'),-1),'|',1) +1,@le+1) ) levels,
	 @pathlevel:= CONCAT(@pathlevel,'|',id,':', @le ,'|') pathlevel,
	 @pathnodes:= IF( pid =-1,',root', CONCAT_WS(',',IF( LOCATE( CONCAT('|',pid,':'),@pathall) > 0 ,SUBSTRING_INDEX( SUBSTRING_INDEX(@pathall,CONCAT('|',pid,':'),-1),'|',1),@pathnodes ) ,pid ) )paths,
	 @pathall:=CONCAT(@pathall,'|',id,':', @pathnodes ,'|') pathall 
	FROM test_tree, 
	(
	 SELECT 
	 @le:=0,
	 @pathlevel:='', 
	 @pathall:='',
	 @pathnodes:=''
	)  vv
	ORDER BY pid,id
) src
WHERE instr(paths,'-1')>0
ORDER BY pid

驗(yàn)證結(jié)果

1、數(shù)據(jù)

2 查詢中國(guó)

SELECT
name,
id,
pid,
levels,
paths
FROM (
	SELECT
	 name,
	 id,
	 pid,
	 @le:= IF (pid = -1 ,0,IF( LOCATE( CONCAT('|',pid,':'),@pathlevel) > 0,SUBSTRING_INDEX( SUBSTRING_INDEX(@pathlevel,CONCAT('|',pid,':'),-1),'|',1) +1,@le+1) ) levels,
	 @pathlevel:= CONCAT(@pathlevel,'|',id,':', @le ,'|') pathlevel,
	 @pathnodes:= IF( pid =-1,',root', CONCAT_WS(',',IF( LOCATE( CONCAT('|',pid,':'),@pathall) > 0 ,SUBSTRING_INDEX( SUBSTRING_INDEX(@pathall,CONCAT('|',pid,':'),-1),'|',1),@pathnodes ) ,pid ) )paths,
	 @pathall:=CONCAT(@pathall,'|',id,':', @pathnodes ,'|') pathall 
	FROM test_tree, 
	(
	 SELECT 
	 @le:=0,
	 @pathlevel:='', 
	 @pathall:='',
	 @pathnodes:=''
	)  vv
	ORDER BY pid,id
) src
WHERE instr(paths,'1')>0
ORDER BY pid

3 查詢福建省

SELECT
name,
id,
pid,
levels,
paths
FROM (
	SELECT
	 name,
	 id,
	 pid,
	 @le:= IF (pid = -1 ,0,IF( LOCATE( CONCAT('|',pid,':'),@pathlevel) > 0,SUBSTRING_INDEX( SUBSTRING_INDEX(@pathlevel,CONCAT('|',pid,':'),-1),'|',1) +1,@le+1) ) levels,
	 @pathlevel:= CONCAT(@pathlevel,'|',id,':', @le ,'|') pathlevel,
	 @pathnodes:= IF( pid =-1,',root', CONCAT_WS(',',IF( LOCATE( CONCAT('|',pid,':'),@pathall) > 0 ,SUBSTRING_INDEX( SUBSTRING_INDEX(@pathall,CONCAT('|',pid,':'),-1),'|',1),@pathnodes ) ,pid ) )paths,
	 @pathall:=CONCAT(@pathall,'|',id,':', @pathnodes ,'|') pathall 
	FROM test_tree, 
	(
	 SELECT 
	 @le:=0,
	 @pathlevel:='', 
	 @pathall:='',
	 @pathnodes:=''
	)  vv
	ORDER BY pid,id
) src
WHERE instr(paths,'2')>0
ORDER BY pid

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論