日期:2014-05-16  浏览次数:20762 次

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



------解决方案--------------------
不懂,帮顶