父分類包圍了其子分類。在數據表中,咱們經過使用表示節點的嵌套關係的左值(left value)和右值(right value)來表現嵌套集合模型 中數據的分層特性。咱們使用了lft和rgt來代替left和right,是由於在MySQL中left和right是保留字。 http://dev.mysql.com/doc/mysql/en/reserved-words.html,有一份詳細的MySQL保留字清單。html
CREATE
TABLE
`region` ( `id`
int
(
11
)
NOT
NULL
auto_increment, `name`
varchar
(
30
)
default
NULL
, `parent_id`
int
(
11
)
default
NULL
, `lft`
int
(
10
) unsigned
default
NULL
, `rgt`
int
(
10
) unsigned
default
NULL
,
PRIMARY
KEY
(`id`) ) ENGINE
=
InnoDB AUTO_INCREMENT
=
11
DEFAULT
CHARSET
=
utf8;
insert
into
`region`(`id`,`name`,`parent_id`,`lft`,`rgt`)
values
(
1
,
'
中國
'
,
0
,
1
,
20
);
insert
into
`region`(`id`,`name`,`parent_id`,`lft`,`rgt`)
values
(
2
,
'
北京
'
,
1
,
2
,
5
);
insert
into
`region`(`id`,`name`,`parent_id`,`lft`,`rgt`)
values
(
3
,
'
北京市
'
,
2
,
3
,
4
);
insert
into
`region`(`id`,`name`,`parent_id`,`lft`,`rgt`)
values
(
4
,
'
上海
'
,
1
,
6
,
9
);
insert
into
`region`(`id`,`name`,`parent_id`,`lft`,`rgt`)
values
(
5
,
'
上海市
'
,
4
,
7
,
8
);
insert
into
`region`(`id`,`name`,`parent_id`,`lft`,`rgt`)
values
(
6
,
'
浙江
'
,
1
,
10
,
19
);
insert
into
`region`(`id`,`name`,`parent_id`,`lft`,`rgt`)
values
(
7
,
'
金華市
'
,
6
,
15
,
16
);
insert
into
`region`(`id`,`name`,`parent_id`,`lft`,`rgt`)
values
(
8
,
'
溫州市
'
,
6
,
17
,
18
);
insert
into
`region`(`id`,`name`,`parent_id`,`lft`,`rgt`)
values
(
9
,
'
杭州市
'
,
6
,
11
,
12
);
insert
into
`region`(`id`,`name`,`parent_id`,`lft`,`rgt`)
values
(
10
,
'
寧波市
'
,
6
,
13
,
14
);
SELECT
CONCAT(REPEAT(
'
'
,
COUNT
(parent.id)
-
1
), node.name)
AS
name, node.id,node.lft,node.rgt,
COUNT
(parent.id)
FROM
region
AS
node, region
AS
parent
where
node.lft
BETWEEN
parent.lft
AND
parent.rgt
group
by
node.id
ORDER
BY
node.lft;
select
parent.name, parent.id
from
region
as
node, region
as
parent
where
node.lft
BETWEEN
parent.lft
and
parent.rgt
and
node.name
=
'
金華市
'
;