地區表里面是有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組,比存儲地區行政編號作用更強,比如按地區搜索訂單時,效果非常顯著。