php - MySQL查询以选择给定任何地区下的城市

标签 php mysql sql database

我有一个包含所有区域(包括城市)的数据库,它们以树状结构排列,使用每个 id 作为父区域 id。

mysql 列是 id , parent_region_id , region_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(州)-> Multi-Region(一个国家内)-> Multi-City(Vicinity)-> City

只有一些国家有 Province (State),其他国家有 Multi-Region (within a country).. 这些国家可能有也可能没有 Multi-City (Vicinity) 级别在它下面。

美国 -> 加利福尼亚 -> 加利福尼亚中部 -> 圣华金河谷 -> Mojave 及附近地区 -> 加利福尼亚市

像上面一样,美国下会有很多地区,所有这些地区可能有很多子区域和这些子区域下的城市。

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

给我美国下的所有城市给我阿拉斯加州下的所有城市

这里有 MySQL 专家可以帮助我吗?

最佳答案

您可以使用多个 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'

关于php - MySQL查询以选择给定任何地区下的城市,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32485468/

相关文章:

php - 更新时 MS Access 错误 "Operation must use an updatable query"

php - 如何修复 PHP 中的 `failed to open stream: Too many open files error`

php - jquery ajax调用删除mysql中的一行

php - 如何从附加的查询字符串中删除最后一个逗号

sql - 如何在sql server中计算平均值

php - 为什么查询显示结果,但大部分参数值都是错误的?

php - PHP 的特征——任何现实世界的例子/最佳实践?

php - 注册用户只应进行一次身份验证

mysql - 更新后触发 - 复制到另一个表

sql - 在 sql 中使用内存表。什么时候合理、安全?