简体   繁体   English

MySQL位置选择查询在存储过程中返回0

[英]MySQL location select query returns 0 in stored procedure

Can anybody spot the problem here? 有人可以在这里发现问题吗? I have a stored procedure I wanna use to find closest locations to a specific location. 我有一个存储过程,想用来查找最接近特定位置的位置。

When I try the select outside of a stored proc (just in a query window) all is fine. 当我尝试在存储的proc之外进行选择时(仅在查询窗口中),一切都很好。

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;

But when I place it in a stored proc it always return 0. 但是,当我将其放置在存储过程中时,它总是返回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 $$

I tried changing the table data types from float4 to float8 to decimals, I tried using inner variables inside the stored, but nothing helps, it always returns distance 0. Seems like it thinks something is INT inside there... 我尝试将表数据类型从float4更改为float8到小数,我尝试在存储的内部使用内部变量,但无济于事,它始终返回距离0。似乎它认为其中的内容为INT ...

Any help would be appreciated. 任何帮助,将不胜感激。

Thanks 谢谢

Ok, I found the problem. 好的,我发现了问题。

The table columns need table identifiers before them. 表格列之前需要表格标识符。 (Table.Column) (TABLE.COLUMN)

This works: 这有效:

DELIMITER $$ 分隔符$$

CREATE PROCEDURE GetLocationsByRadius (IN latitude double, IN longitude double,IN radius double) begin 创建过程GetLocationsByRadius (纬度加倍,经度加倍,半径加倍)开始

SELECT ( 6371 * acos( cos( radians(latitude) ) * cos( radians( Locations.Latitude ) ) * cos( radians( Locations.Longitude ) - radians(longitude) ) + sin( radians(latitude) ) * sin( radians( Locations.Latitude ) ) ) ) AS distance FROM Locations HAVING distance < radius ORDER BY distance LIMIT 0 , 20; SELECT(6371 * acos(cos(弧度(纬度))* cos(弧度(Locations.Latitude))* cos(radians(Locations.Longitude)-radians(longitude))+ sin(radians(latitude))* sin(radians (Locations.Latitude))))到位置的AS距离HAVING距离<半径ORDER BY距离LIMIT 0,20;

end $$ 结束$$

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM