【发布时间】:2014-02-04 07:03:58
【问题描述】:
谁能发现这里的问题? 我有一个存储过程,我想用它来查找离特定位置最近的位置。
当我尝试在存储过程之外(仅在查询窗口中)进行选择时,一切都很好。
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 到小数,我尝试在存储中使用内部变量,但没有任何帮助,它总是返回距离 0。 好像它认为里面有什么东西是 INT...
任何帮助将不胜感激。
谢谢
【问题讨论】:
-
在下面回答,感谢所有花时间在上面的人。
标签: mysql stored-procedures floating-point geolocation