前段时间一个项目中有一个地区级联需要取出某个地区下的所有子孙区域。
通常一般情况地区都会存放在一个表中
像这种方式设计表的,如果我想取出成都下边所有的地区只能有循环递归的方式取出:
1.先取出成都的记录,
2.再查成都下一级的区域。上级编号(parentid)是成都(2)的记录,查询出编号(id)为5,6,7的记录
3.再依次查出5,6,7下的一级区域 ,
依次类推直到区域没有下一级区域为止。这样做事我想到的第一种方法也是能够满足需求的,但是从性能的角度想的话这个确实不怎么好。
后边好好的想了下如果这样设计会好很多
地区的编号有字符串表示
每个地区的编号都等于他的上一级地区的编号+该地区自身的编号 ,这样就可以很直接的分辨出某个地区有哪些下级地区。
比如: 四川编号为11 ,下级地区成都自身的编号为11,那么成都的编号就为1111,成都下边的地区都是以1111开头的,要查询成都下边的所有区域
select * from area where id like '1111%'
此处虽用到了like 但是%匹配时匹配的后边的前面还是能够用到索引,这个的数据也就几千条
types 是地区的类型 省级,市级,县级 还可以分级别查询
编号也可以用数值型表示 where id<xx and id>yy 比较
个人理解还望多多给出建议