ホームページ  >  記事  >  データベース  >  MySql はどのように親 ID を使用して子ノードを下位に再帰的にクエリするのでしょうか?

MySql はどのように親 ID を使用して子ノードを下位に再帰的にクエリするのでしょうか?

王林
王林転載
2023-05-30 16:03:281139ブラウズ

ストアド プロシージャを記述する必要も、データベース関数を構築する必要もありません。SQL の一部だけを実装できます

SELECT
	ID.LEVEL,
	DATA.* 
FROM
	(
	SELECT
		@ids AS _ids,
		( SELECT @ids := GROUP_CONCAT( region_id ) FROM region WHERE FIND_IN_SET(parent_id, @ids ) ) AS cids,
		@l := @l + 1 AS LEVEL 
	FROM
		region,
		( SELECT @ids := 3, @l := 0 ) b 
	WHERE
		@ids IS NOT NULL 
	) ID,
	region DATA 
WHERE
	FIND_IN_SET( DATA.region_id, ID._ids ) 
ORDER BY
	LEVEL

MySql はどのように親 ID を使用して子ノードを下位に再帰的にクエリするのでしょうか?

テスト

--创建测试环境
create table t_test(
	id int PRIMARY key,
	parent_id int,
	name varchar(200)
)

insert t_test VALUES(1,null,"中国");

insert t_test VALUES(2,1,"华北");

insert t_test VALUES(3,2,"山西省");
insert t_test VALUES(4,2,"北京");

insert t_test VALUES(5,3,"临汾市");
insert t_test VALUES(6,4,"北京市");


insert t_test VALUES(7,5,"尧都区");
insert t_test VALUES(8,6,"朝阳区");

insert t_test VALUES(9,7,"解放西路");
insert t_test VALUES(10,8,"朝阳北路");


SELECT * FROM t_test;

テストデータ表示

MySql はどのように親 ID を使用して子ノードを下位に再帰的にクエリするのでしょうか?

クエリID=1、中国の下にある場所をクエリ

SELECT
	ID.LEVEL,
	DATA.* 
FROM
	(
	SELECT
		@ids AS _ids,
		( SELECT @ids := GROUP_CONCAT( id ) FROM t_test WHERE FIND_IN_SET(parent_id, @ids ) ) AS cids,
		@l := @l + 1 AS LEVEL 
	FROM
		t_test,
		( SELECT @ids := 1, @l := 0 ) b 
	WHERE
		@ids IS NOT NULL 
	) ID,
	t_test DATA 
WHERE
	FIND_IN_SET( DATA.id, ID._ids ) 
ORDER BY
	LEVEL

MySql はどのように親 ID を使用して子ノードを下位に再帰的にクエリするのでしょうか?

id=3、山西省の下にある場所を確認してください

SELECT
	ID.LEVEL,
	DATA.* 
FROM
	(
	SELECT
		@ids AS _ids,
		( SELECT @ids := GROUP_CONCAT( id ) FROM t_test WHERE FIND_IN_SET(parent_id, @ids ) ) AS cids,
		@l := @l + 1 AS LEVEL 
	FROM
		t_test,
		( SELECT @ids := 3, @l := 0 ) b 
	WHERE
		@ids IS NOT NULL 
	) ID,
	t_test DATA 
WHERE
	FIND_IN_SET( DATA.id, ID._ids ) 
ORDER BY
	LEVEL

MySql はどのように親 ID を使用して子ノードを下位に再帰的にクエリするのでしょうか?

id=4、北京の下にある場所を確認してください

MySql はどのように親 ID を使用して子ノードを下位に再帰的にクエリするのでしょうか?

最後に、id=2

MySql はどのように親 ID を使用して子ノードを下位に再帰的にクエリするのでしょうか?

を使用して中国北部地域からクエリを実行します。

以上がMySql はどのように親 ID を使用して子ノードを下位に再帰的にクエリするのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。