创建数据表
CREATE TABLE `area` (
`id` int(9) NOT NULL AUTO_INCREMENT,
`name` varchar(100) DEFAULT NULL COMMENT '地区名',
`level` tinyint(2) DEFAULT NULL COMMENT '区域等级',
`parent` int(9) DEFAULT NULL COMMENT '父级地区ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=utf8;
插入数据
BEGIN;
INSERT INTO `area` VALUES (1, '中国', 1, 0);
INSERT INTO `area` VALUES (4, '杭州', 3, 20);
INSERT INTO `area` VALUES (5, '成都市', 3, 10);
INSERT INTO `area` VALUES (6, '双流区', 4, 5);
INSERT INTO `area` VALUES (7, '武侯区', 4, 5);
INSERT INTO `area` VALUES (8, '锦江区', 4, 5);
INSERT INTO `area` VALUES (9, '青羊区', 4, 5);
INSERT INTO `area` VALUES (10, '四川省', 2, 1);
INSERT INTO `area` VALUES (11, '成华区', 4, 5);
INSERT INTO `area` VALUES (12, '上城区', 4, 4);
INSERT INTO `area` VALUES (13, '拱墅区', 4, 4);
INSERT INTO `area` VALUES (14, '西湖区', 4, 4);
INSERT INTO `area` VALUES (15, '滨江区', 4, 4);
INSERT INTO `area` VALUES (16, '萧山区', 4, 4);
INSERT INTO `area` VALUES (17, '宁波', 3, 20);
INSERT INTO `area` VALUES (18, '海曙区', 4, 17);
INSERT INTO `area` VALUES (19, '江北区', 4, 17);
INSERT INTO `area` VALUES (20, '浙江省', 2, 1);
INSERT INTO `area` VALUES (21, '镇海区', 4, 17);
INSERT INTO `area` VALUES (22, '北仑区', 4, 17);
INSERT INTO `area` VALUES (23, '鄞州区', 4, 17);
INSERT INTO `area` VALUES (24, '奉化区', 4, 17);
INSERT INTO `area` VALUES (25, '南充市', 3, 10);
INSERT INTO `area` VALUES (26, '南部县', 4, 25);
INSERT INTO `area` VALUES (27, '顺庆区', 4, 25);
INSERT INTO `area` VALUES (28, '高坪区', 4, 25);
INSERT INTO `area` VALUES (29, '嘉陵区', 4, 25);
INSERT INTO `area` VALUES (30, '阆中市', 4, 25);
INSERT INTO `area` VALUES (31, '西充县', 4, 25);
INSERT INTO `area` VALUES (32, '蓬安县', 4, 25);
INSERT INTO `area` VALUES (33, '营山县', 4, 25);
COMMIT;
递归查询
SELECT
id,
`name`,
`level`,
parent
FROM
(
SELECT
t1.*,
IF
(
FIND_IN_SET( parent, @pids ) > 0,
@pids :=
IF
( FIND_IN_SET( id, @pids ) <= 0, CONCAT( @pids, ',', id ), @pids ),
0
) AS ischild
FROM
( SELECT * FROM area ORDER BY `level`, id ) t1,
( SELECT @pids := 10 ) t2
HAVING
ischild != 0
) AS t3
大家若要使用的话,将
( SELECT @pids := 10 ) t2
中的10
替换成你想要查询的地区就可以了,当然表结构不同的需要将对应字段进行替换哈。我这里查询的是 ID 为10 的四川省的所有下级,结果如下
5 成都市 3 10
25 南充市 3 10
6 双流区 4 5
7 武侯区 4 5
8 锦江区 4 5
9 青羊区 4 5
11 成华区 4 5
26 南部县 4 25
27 顺庆区 4 25
28 高坪区 4 25
29 嘉陵区 4 25
30 阆中市 4 25
31 西充县 4 25
32 蓬安县 4 25
33 营山县 4 25
欢迎访问我的博客 原文地址