Php 将这两个MySQL查询合并为一个

Php 将这两个MySQL查询合并为一个,php,mysql,sql,distance,Php,Mysql,Sql,Distance,我向你解释这个问题。我有两个表:列出我所有的列表,其中包含不同的信息,特别是一个:城市ID。我有第二个表city,其中包含我所在国家所有城市的完整列表,包含许多信息:纬度、经度、城市名称等 我想按地理定位的实际点之间的距离显示所有列表,列表表中有lat/lng和城市 实际上,我是通过两个MySQL查询来完成这项工作的: $formula = "(6366*acos(cos(radians($latitude))*cos(radians(`latitude`))*cos(radians(`long

我向你解释这个问题。我有两个表:列出我所有的列表,其中包含不同的信息,特别是一个:城市ID。我有第二个表city,其中包含我所在国家所有城市的完整列表,包含许多信息:纬度、经度、城市名称等

我想按地理定位的实际点之间的距离显示所有列表,列表表中有lat/lng和城市

实际上,我是通过两个MySQL查询来完成这项工作的:

$formula = "(6366*acos(cos(radians($latitude))*cos(radians(`latitude`))*cos(radians(`longitude`) -radians($longitude))+sin(radians($latitude))*sin(radians(`latitude`))))";

        $q = "SELECT *,$formula AS dist FROM ".$this->db_city." WHERE $formula<='$distance' ORDER by dist ASC";
        $q = $this->db->query($q);
$resultSQL = $q->result_array();
这是可行的,但问题是我在第二个查询中没有可访问的dist参数,因此我不能按dist排序。解决方法是将第一个带公式的大查询与第二个合并


我试着用LEFT JOIN,但没用。你能帮我吗?谢谢

试试这个,它将返回所有距离提供的经度和纬度以$distance为半径的城市

"SELECT *,(((acos(sin(($latitude*pi()/180)) * sin((`latitude`*pi()/180))+cos(($latitude*pi()/180)) * cos((`Latitude`*pi()/180)) * cos((($longitude- 
    `longitude`)*pi()/180))))*180/pi())*60*1.1515) AS distance FROM location WHERE (((acos(sin(($latitude*pi()/180)) * sin((`latitude`*pi()/180))+cos(($latitude*pi()/180)) * cos((`Latitude`*pi()/180)) * cos((($longitude- 
    `longitude`)*pi()/180))))*180/pi())*60*1.1515) <= $distance"

谢谢。

Hmmm谢谢,但它只是做了与第一次查询相同的事情。它正在工作,但我想在第二个查询中使用这个dist值。获取我的列表的人。@jackson:似乎您忘记在第二次查询中放置表名,$this->db_listing。$where子句以where子句开头,省略了表名,您可以放置表名吗?共享您的数据结构我将帮助您。表列表id,列表名称,城市表城市id,lat,lng,城市名称,因此我希望全局执行:按地区从列表顺序选择*但是,地区字段是由第一个查询生成的,而不是第二个查询。
"SELECT *,(((acos(sin(($latitude*pi()/180)) * sin((`latitude`*pi()/180))+cos(($latitude*pi()/180)) * cos((`Latitude`*pi()/180)) * cos((($longitude- 
    `longitude`)*pi()/180))))*180/pi())*60*1.1515) AS distance FROM location WHERE (((acos(sin(($latitude*pi()/180)) * sin((`latitude`*pi()/180))+cos(($latitude*pi()/180)) * cos((`Latitude`*pi()/180)) * cos((($longitude- 
    `longitude`)*pi()/180))))*180/pi())*60*1.1515) <= $distance"