MySQL位置选择查询在存储过程中返回0

时间:2014-02-04 07:03:58

标签: mysql stored-procedures floating-point geolocation

有人能在这里发现问题吗? 我有一个存储过程,我想用它来找到特定位置的最近位置。

当我尝试在存储过程之外选择时(仅在查询窗口中)一切都很好。

SELECT  id, 
        ( 3959*acos( 
            cos(radians(37)) *
            cos(radians(lat)) *
            cos(radians(lng) - radians(-122)) + 
            sin(radians(37)) * 
            sin(radians(lat)) 
            ) 
        ) AS distance 
FROM markers 
HAVING distance < 25 
ORDER BY distance 
LIMIT 0 , 20;

但是当我将它放在存储过程中时,它总是返回0.

DELIMITER $$

CREATE PROCEDURE `GetLocationsByRadius`(IN latitude double, IN longitude double,IN  radius double)
begin

  SELECT  ( 6371 * acos( cos( radians(latitude) ) * cos( radians( Latitude ) ) * cos( radians( Longitude ) - radians(longitude ) ) + sin( radians(latitude) ) * sin( radians( Latitude ) ) ) ) AS distance FROM LocationTrades HAVING distance < radius ORDER BY distance LIMIT 0 , 20;


end $$

我尝试将表数据类型从float4更改为float8到decimals,我尝试在存储中使用内部变量,但没有任何帮助,它总是返回距离0。 好像它认为那里的东西是INT ......

任何帮助都将不胜感激。

由于

1 个答案:

答案 0 :(得分:0)

好的,我发现了问题。

表列需要在它们之前的表标识符。 (TABLE.COLUMN)

这有效:

  

DELIMITER $$

     

CREATE PROCEDURE GetLocationsByRadius(在纬度加倍,IN   经度加倍,IN半径为double)开始

     

SELECT(6371 * acos(cos(弧度(纬度))* cos(弧度(   Locations.Latitude))* cos(弧度(Locations.Longitude) -   弧度(经度))+ sin(弧度(纬度))* sin(弧度(   Locations.Latitude))))距离FROM距离的距离   &LT;半径ORDER BY距离LIMIT 0,20;

     

结束$$