MySQL位置选择查询在存储过程中返回0
Posted
技术标签:
【中文标题】MySQL位置选择查询在存储过程中返回0【英文标题】:MySQL location select query returns 0 in stored procedure 【发布时间】: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...
任何帮助将不胜感激。
谢谢
【问题讨论】:
在下面回答,感谢所有花时间在上面的人。 【参考方案1】:好的,我找到了问题。
表列之前需要表标识符。 (表.列)
这行得通:
分隔符 $$
创建过程
GetLocationsByRadius
(IN latitude double, IN longitude double,IN radius double) 开始SELECT ( 6371 * acos( cos( 弧度(纬度) ) * cos( 弧度( Locations.Latitude ) ) * cos( 弧度( Locations.Longitude ) - 弧度(经度))+ sin(弧度(纬度))* sin(弧度( Locations.Latitude ) ) ) AS distance FROM Locations HAVING distance
结束$$
【讨论】:
可能是使用了latitude ,latitude and longitude ,Longitude 使用表名解析的。以上是关于MySQL位置选择查询在存储过程中返回0的主要内容,如果未能解决你的问题,请参考以下文章
mysql存储过程group_concat为游标中的选择返回null