省、市、县、乡/镇、村、组,以及这些地区的医疗机构,行政单位,都存储在base_org表中。
省、市、县、乡/镇、村、组,属于行政区划。
政府部门:行政单位。
行政区划、行政单位、医疗机构,在base_org表中,根据字段org_type区分。
base_org表的字段:
字段 | 字段含义 | 使用说明 |
org_id | id,主键 | |
org_code | 编码 | |
org_name | 名称 | |
org_type | 机构类型,1.行政区划,2.行政机构,3.医疗机构 | |
parent_id | 父级id | 根据这个字段,可以查到所属上级行政区划。 |
org_seq | 从省级顶级开始,到此条记录,所有的org_id按顺序的排列,以"."分隔。比如:0.1.12.123.1234. | 根据这个字段,可以一次查到所有上级行政区划。也可以通过这个字段,查到所有下级,下下级……行政区划。只要以此org_seq开头即可。 |
fp_code | 当前机构所属的省级行政区划的code |
相比一级一级的查,下面这几个字段,可以更快的定位所属的省市县。比如,此条记录是村里的组,那如果要查组所属的省或市,就要一层一层往上推,使用SQL也会比较麻烦,不能一下子查出来。 但如果在维护的过程中,存储了这几个字段,在查询和统计时,就可以快速查到了。 |
fp_name | 当前机构所属的省级行政区划的name | 同上 |
fc_code | 当前机构所属的市级行政区划的code | 同上 |
fc_name | 当前机构所属的市级行政区划的name | 同上 |
fr_code | 当前机构所属的县级行政区划的code | 同上 |
fr_name | 当前机构所属的县级行政区划的code |
同上。如果没有存储这几个字段,那要查一个省下每个市的统计数据,就要先根据省的orgid,查到下级所有市的orgseq。然后逐个统计每个市里所有的级别的数据。那么逐个统计就会比较慢。最快的SQL查询方法是分组group by一次查出所有的市统计数据。因为orgseq下级又会有很多子级,那么,要使用group by,就只能对substring(orgseq,N)的结果进行group by了。虽然显得不那么简洁,但是也比逐个统计市级效率和速度要快。 补充:在实际的开发中,由于用group by substring(orgseq,N)的语法略微复杂,有些开发人员对语法不熟悉,会不想用这种方式。所以,在实际的开发中,我们采用的是用Java代码来处理这个过程。具体方式如下: 要做的功能:查某个县级下所有乡镇的统计数据,并展示出每个县的统计值。 做法:步骤1.通过seq like '县的seq%' 查出某个县下所有的数据的list。 步骤2.查出县下所有的乡镇对象组成的list。 步骤3.循环第2步乡镇的list, for(乡镇i : 乡镇的list){ new map存储这个乡镇的统计数据 new 乡镇的num; for(数据j : 第一步的数据list){ if ( 数据j.seq contains(乡镇i.seq) ){ 则,乡镇的num累加。 把乡镇的num存入map中。 } } } |