Bagaimanakah MySql menggunakan id induk untuk menanyakan nod anak ke bawah secara rekursif?

王林
Lepaskan: 2023-05-30 16:03:28
ke hadapan
1103 orang telah melayarinya

Tidak perlu menulis prosedur tersimpan, tidak perlu membina fungsi pangkalan data, hanya sekeping sql boleh dilaksanakan

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
Salin selepas log masuk

Bagaimanakah MySql menggunakan id induk untuk menanyakan nod anak ke bawah secara rekursif?

Uji

--创建测试环境
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;
Salin selepas log masuk

Paparan data ujian

Bagaimanakah MySql menggunakan id induk untuk menanyakan nod anak ke bawah secara rekursif?

Id pertanyaan=1, tanya tempat di China

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
Salin selepas log masuk

Bagaimanakah MySql menggunakan id induk untuk menanyakan nod anak ke bawah secara rekursif?

id=3, semak tempat mana yang berada di bawah Shanxi

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
Salin selepas log masuk

Bagaimanakah MySql menggunakan id induk untuk menanyakan nod anak ke bawah secara rekursif?

id=4, semak tempat mana yang berada di bawah Beijing

Bagaimanakah MySql menggunakan id induk untuk menanyakan nod anak ke bawah secara rekursif?

Akhir sekali, cari ke bawah dari id=2 kawasan China Utara

Bagaimanakah MySql menggunakan id induk untuk menanyakan nod anak ke bawah secara rekursif?

Atas ialah kandungan terperinci Bagaimanakah MySql menggunakan id induk untuk menanyakan nod anak ke bawah secara rekursif?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!