MYSql 地区搜索有关问题

MYSql 地区搜索问题

有一个地区表如下 

region_id parent_id region_name 

1 0 广东 

2 1 广州 

3 1 佛山 

4 2 海珠区 

如果我需要搜索广东,则显示广东的下级地区的所有id,包括他下级的下级(如海珠区);如果我搜索的是广州,则显示广州的下级地区的所有id。

请问该如何写mysql语句呀?

附mssql的做法:

SQL code


  
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



不懂,帮顶

MYSql 地区搜索有关问题

相关文章:

你感兴趣的文章:

标签云: