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
#🎜🎜 #
--创建测试环境
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;
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
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ékin
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!