MySQL查询选择给定的任何区域下的城市

时间:2015-09-09 17:03:22

标签: php mysql sql database

我有一个包含所有地区的数据库,包括以树形结构排列的城市,每个地区使用id作为父地区ID。

mysql列是idparent_region_idregion_name

结构就像......

SELECT region_id, region_type, region_name, parent_region_id, parent_region_name FROM regions_data WHERE parent_region_id = 201

enter image description here

地区类型是....

Country -> Province (State) -> Multi-Region (within a country) -> Multi-City (Vicinity) -> City

只有部分国家/地区Province (State),其他国家/地区Multi-Region (within a country) ..这些国家/地区可能有Multi-City (Vicinity)级别,也可能没有US -> California -> Central California -> San Joaquin Valley -> Mojave & Vicinity -> California City级别。

Give me all cities under US

如上所述,美国将有很多地区,所有这些地区可能在这些次地区下有很多次地区和城市。

我想要一个完美的MySQL查询,它将返回给定区域内的所有城市。

Give me all cities under ALASKA STATE<div class="btnAll btnExec">Execute SQL Job</div>

这里有MySQL专家来帮助我吗?

2 个答案:

答案 0 :(得分:2)

您可以使用多个JOIN来浏览子级别,然后仅打印具有您正在寻找的正确region_type的子级别。假设您最多有6个级别(如果需要,可以添加更多......):

SELECT 
  IF(`t1`.`region_type`='City', `t1`.`region_name`,
    IF(`t2`.`region_type`='City', `t2`.`region_name`,
      IF(`t3`.`region_type`='City', `t3`.`region_name`,
        IF(`t4`.`region_type`='City', `t4`.`region_name`,
          IF(`t5`.`region_type`='City', `t5`.`region_name`, '')
        )
      )
    )
  )
FROM `regions_data`

LEFT JOIN `regions_data` `t1` ON (`t1`.`parent_region_id` = `regions_data`.`id`)
LEFT JOIN `regions_data` `t2` ON (`t2`.`parent_region_id` = `t1`.`id`) 
LEFT JOIN `regions_data` `t3` ON (`t3`.`parent_region_id` = `t2`.`id`) 
LEFT JOIN `regions_data` `t4` ON (`t4`.`parent_region_id` = `t3`.`id`) 
LEFT JOIN `regions_data` `t5` ON (`t5`.`parent_region_id` = `t4`.`id`) 

WHERE `regions_data`.`region_name` = 'ALASKA STATE'

答案 1 :(得分:0)

在mysql中试试这个:

select @pv:=id as id,region_name, parent_region_id from `your_table_name`
join
(select @pv:=1)tmp
where parent_region_id=@pv

我使用1,你可以使用你的欲望id