mysql根据村行政编号查询地区id组,村行政编号查询整串地区名称

地区表里面是有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组,比存储地区行政编号作用更强,比如按地区搜索订单时,效果非常显著。

posted on 2021-11-09 09:38  鱼塘总裁  阅读(951)  评论(0编辑  收藏  举报