我有一个包含名为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。
答案 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
的聚合查询,因此不应该有其他列。