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的存储过程如何返回查询到的行数据?

将存储过程中选择查询的结果返回到列表

mysql存储过程group_concat为游标中的选择返回null

如果发生多行,如何在 php mysql 的侧存储过程中执行选择查询?

mysql-数据获取过程

MYSQL 存储过程如何取得一个表的查询结果?