有人能在这里发现问题吗? 我有一个存储过程,我想用它来找到特定位置的最近位置。
当我尝试在存储过程之外选择时(仅在查询窗口中)一切都很好。
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 ......
任何帮助都将不胜感激。
由于
答案 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;
结束$$