【问题标题】:MySQL location select query returns 0 in stored procedureMySQL位置选择查询在存储过程中返回0
【发布时间】: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


【解决方案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 使用表名解析的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-13
  • 1970-01-01
  • 1970-01-01
  • 2014-05-25
  • 1970-01-01
  • 2013-09-24
  • 1970-01-01
相关资源
最近更新 更多