我有一个包含所有区域(包括城市)的数据库,它们以树状结构排列,使用每个 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
区域类型是....
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/