地区表里面是有6级的,级别分别是:国、省/直辖市、市、区/县、乡镇、村/小区,实现通过村的地区行政编号查询整个详细地址。
数据库中准备好地区数据,表名称为“area1”,字段结构如下:
字段结构中,id是地区的id号,parent_id是地区与上级地区的关联id,如此有序构建6级地区,从国一直构建到村。
数据表里面的数据截图如下:
我们要实现通过输入村的number(地区编号)就能查询出村上面的一串的详细地址,并且能查询出一串的ID组
由于下级与上级的关系是用parent_id字段做关联的,地址数据不在一条上面,每次查询编号时,都要对应的查询上层5次,所以sql语句较为麻烦。
sql语句如下:
SELECT `a6`.`number` AS `number`, concat( `a1`.`id`, ',', `a2`.`id`, ',', `a3`.`id`, ',', `a4`.`id`, ',', `a5`.`id`, ',', `a6`.`id` ) AS `area_id`, concat( `a1`.`name`, `a2`.`name`, `a3`.`name`, `a4`.`name`, `a5`.`name`, `a6`.`name` ) AS `area_name` FROM ((((( `area1` `a6` JOIN `area1` `a5` ON (( `a6`.`parent_id` = `a5`.`id` ))) JOIN `area1` `a4` ON (( `a5`.`parent_id` = `a4`.`id` ))) JOIN `area1` `a3` ON (( `a4`.`parent_id` = `a3`.`id` ))) JOIN `area1` `a2` ON (( `a3`.`parent_id` = `a2`.`id` ))) JOIN `area1` `a1` ON (( `a2`.`parent_id` = `a1`.`id` ))) WHERE (( `a6`.`level` = 6 ) AND ( `a6`.`number` = 110101001002 )) LIMIT 0,1
通过以上sql语句,只要改变number的值就能得到结果,查询结果如下图:
这样就实现了通过number(地区行政编号)查询area_id(id组),area_name(详细地址)的作用。
一般在选择地区时,存储ID组,比存储地区行政编号作用更强,比如按地区搜索订单时,效果非常显著。