Maison >base de données >tutoriel mysql >Comment MySql utilise-t-il l'identifiant parent pour interroger de manière récursive les nœuds enfants vers le bas ?

Comment MySql utilise-t-il l'identifiant parent pour interroger de manière récursive les nœuds enfants vers le bas ?

王林
王林avant
2023-05-30 16:03:281228parcourir

Pas besoin d'écrire des procédures stockées, pas besoin de créer des fonctions de base de données, juste un morceau de SQL peut être réalisé

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

Comment MySql utilise-t-il lidentifiant parent pour interroger de manière récursive les nœuds enfants vers le bas ?#🎜🎜 #

#🎜 🎜#test

--创建测试环境
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;

Affichage des données de test

Comment MySql utilise-t-il lidentifiant parent pour interroger de manière récursive les nœuds enfants vers le bas ?query id= 1. Vérifiez quels endroits se trouvent au bas de la Chine

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

Comment MySql utilise-t-il lidentifiant parent pour interroger de manière récursive les nœuds enfants vers le bas ?id=3. du 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

#🎜 🎜#

id=4, vérifie quels endroits sont en dessous de PékinComment MySql utilise-t-il lidentifiant parent pour interroger de manière récursive les nœuds enfants vers le bas ?

# 🎜🎜#Enfin, descendez du nord de la Chine avec id=2 Requête

Comment MySql utilise-t-il lidentifiant parent pour interroger de manière récursive les nœuds enfants vers le bas ?

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer