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

王林
リリース: 2023-05-30 16:03:28
転載
1103 人が閲覧しました

ストアド プロシージャを記述する必要も、データベース関数を構築する必要もありません。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 までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!