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

MySQL位置选择查询在存储过程中返回0,mysql,stored-procedures,floating-point,geolocation,Mysql,Stored Procedures,Floating Point,Geolocation,有人能在这里发现问题吗? 我有一个存储过程,我想用它来查找与特定位置最近的位置 当我尝试在存储过程之外(仅在查询窗口中)进行选择时,一切都很好 SELECT id, ( 3959*acos( cos(radians(37)) * cos(radians(lat)) * cos(radians(lng) - radians(-122)) + sin(radians(37)) *

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

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

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;
选择id,
(3959*acos(
cos(弧度(37))*
cos(弧度(纬度))*
cos(弧度(lng)-弧度(-122))+
sin(弧度(37))*
正弦(弧度(纬度))
) 
)作为距离
从标记
距离小于25的
按距离排序
限值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 $$
分隔符$$
创建过程“GetLocationsByRadius”(纬度双精度、经度双精度、半径双精度)
开始
选择(6371*acos(cos(弧度(纬度))*cos(弧度(纬度))*cos(弧度(经度)-弧度(经度))+sin(弧度(纬度))*sin(弧度(纬度)))作为与距离小于半径顺序距离限制0,20的地点的距离;
结束$$
我尝试将表数据类型从float4更改为float8,再更改为小数,我尝试在存储的表中使用内部变量,但没有任何帮助,它总是返回距离0。 好像它认为里面有什么东西是INT

任何帮助都将不胜感激


谢谢

好的,我找到问题了

表列之前需要表标识符。(表.第列)

这项工作:

分隔符$$

创建过程
GetLocationsByRadius
(在双纬度中,在 经度双精度,半径双精度)开始

选择(6371*acos(弧度(纬度))*cos(弧度( 位置.纬度)]*cos(弧度(位置.经度)- 弧度(经度))+sin(弧度(纬度))*sin(弧度( 位置(纬度)))作为距离具有距离的位置的距离 <距离限制0,20的半径顺序

结束$$


回答如下,感谢所有花时间在上面的人。这可能是因为使用了纬度、纬度和经度,经度是通过使用表名来解析的。