有一个地区表如下
region_id parent_id region_name
1 0 广东
2 1 广州
3 1 佛山
4 2 海珠区 如果我需要搜索广东,则显示广东的下级地区的所有id,包括他下级的下级(如海珠区);如果我搜索的是广州,则显示广州的下级地区的所有id。请问该如何写mysql语句呀?
附mssql的做法:
create table tb(region_id int, parent_id int, region_name varchar(10))
insert into tb values(1 , 0 , '广东')
insert into tb values(2 , 1 , '广州')
insert into tb values(3 , 1 , '佛山')
insert into tb values(4 , 2 , '海珠区')
go--查询指定节点及其所有子节点的函数
create function f_cid(@region_id int) returns @t_level table(region_id int , level int)
as
begin
declare @level int
set @level = 1
insert into @t_level select @region_id , @level
while @@ROWCOUNT > 0
begin
set @level = @level + 1
insert into @t_level select a.region_id , @level
from tb a , @t_Level b
where a.parent_id = b.region_id and b.level = @level - 1
end
return
end
go--调用函数查询1(广东)及其所有子节点
select a.* from tb a , f_cid(1) b where a.region_id = b.region_id order by a.region_id
/*
region_id parent_id region_name
----------- ----------- -----------
1 0 广东
2 1 广州
3 1 佛山
4 2 海珠区(所影响的行数为 4 行)
*/--调用函数查询2(广州)及其所有子节点
select a.* from tb a , f_cid(2) b where a.region_id = b.region_id order by a.region_id
/*
region_id parent_id region_name
----------- ----------- -----------
2 1 广州
4 2 海珠区(所影响的行数为 2 行)
*/drop table tb
drop function f_cid
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货