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

Php MySQL查询选择给定区域下的城市,php,mysql,sql,database,Php,Mysql,Sql,Database,我有一个包括城市在内的所有地区的数据库,它们以树状结构排列,使用每个地区的id作为父地区id mysql列包括id、父区域id、区域名称 结构就像 从parent_region_id=201的regions_数据中选择region_id、region_类型、region_名称、parent_region_id、parent_region_名称 区域类型是 国家->省-州->一个国家内的多个地区->多个城市附近->城市 只有一些国家有省州,其他国家在一个国家内有多个地区。。这两个城市可能有也可能没

我有一个包括城市在内的所有地区的数据库,它们以树状结构排列,使用每个地区的id作为父地区id

mysql列包括id、父区域id、区域名称

结构就像

从parent_region_id=201的regions_数据中选择region_id、region_类型、region_名称、parent_region_id、parent_region_名称

区域类型是

国家->省-州->一个国家内的多个地区->多个城市附近->城市

只有一些国家有省州,其他国家在一个国家内有多个地区。。这两个城市可能有也可能没有多城市邻近水平

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

如上所述,我们将有很多地区,所有这些地区都可能有很多次区域和次区域下的城市

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

说给我所有在我们下面的城市或者给我所有在阿拉斯加州下面的城市

这里有MySQL专家帮助我吗

在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,您可以使用您的desire id,您可以使用几个连接来通过子级别,然后只打印那些具有您要查找的正确区域类型的。假设您最多有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'

Mysql无法进行递归查询。您应该通过php代码或procedure@splash58我对程序不太了解。。什么样的程序?如果可以的话,你能详细说明一下吗?你能分享一下你的表结构吗?我不确定这里是否有人会为你写代码。试着问一下你们将要面对的问题,贴一张你们桌子的截图。很难理解您的表是什么样的,而不是1,他还可以编写select@pv:=id作为id,region\u name,parent\u region\u id从表join select@pv:=select id从表where region\u name='US'tmp where parent\u region\u id=@pv;对他也可以使用这个子查询来查找idI。我尝试了这个,但我只得到了3条记录,而且它们只比我们低一级。。不是城市。这是我得到的结果--202阿拉巴马201 6057756阿拉巴马州中部202 6057762牛津和附近6057756在这个查询中可以选择更多的列吗?使用此选项,我们只能选择区域名称,对吗?对。那是你的问题。您可以使用选择正确区域名称的相同方式添加更多列。假设有一列包含这些记录(如view\u count),我想按view\u count对结果排序。如何使用此查询实现这一点?是否可能?您可以使用与上面相同的结构添加一个view\u count列,然后添加一个orderby 2子句。