Rumah  >  Artikel  >  pangkalan data  >  Bagaimanakah MySql menggunakan id induk untuk menanyakan nod anak ke bawah secara rekursif?

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

王林
王林ke hadapan
2023-05-30 16:03:281152semak imbas

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

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;

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

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

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!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam