MYSQL选择纬度和经度之间的MIN距离

时间:2014-06-14 17:55:39

标签: sql

我有一个包含名为func_id,纬度和经度的列的表。我试图获取最小距离行并通过函数返回func_id。

我试过了:

 function Get_Min_func_id($lat, $long){
        $query = mysql_query("
 select func_id,
   MIN( 3959 * acos( cos( radians('$lat') ) 
          * cos( radians( latitude ) ) 
          * cos( radians( longitude ) - radians('$long') ) 
          + sin( radians('$lat') ) 
          * sin( radians( latitude ) ) ) )  AS distance 
from entregas 
");

  return @mysql_result($query, 0, 'func_id');
  }

但它不能正常工作。它只返回相同的func_id。

1 个答案:

答案 0 :(得分:1)

这是您想要的查询:

 select func_id,
        ( 3959 * acos( cos( radians('$lat') ) 
          * cos( radians( latitude ) ) 
          * cos( radians( longitude ) - radians('$long') ) 
          + sin( radians('$lat') ) 
          * sin( radians( latitude ) ) ) )  AS distance 
 from entregas
 order by distance asc
 limit 1;

您的查询将返回最小距离,但func_id的任意值。作为一般规则,除了使用聚合函数之外,group by中的列应始终与select中的列相同。在这种情况下,您有一个没有group by的聚合查询,因此不应该有其他列。