在mysql查询中使用列的值进行计算

时间:2010-09-08 11:43:57

标签: mysql

我有这个代码应该(希望)得到最接近给定位置的结果:

$sql = "SELECT *,
    lat as LAT,
    long as LONG
FROM mellow_listings
ORDER BY SQRT(((".$long."-LONG)*(".$long."-LONG))
    +((".$lat."-LAT)*(".$lat."-LAT))) ASC
LIMIT 0,10";

由于某种原因,它根本不起作用。我认为是因为我在计算中错误地使用了列名...

有什么想法吗?

谢谢

2 个答案:

答案 0 :(得分:2)

我打赌你在北美的欧元区,其中半球的经度是负面的。

尝试在括号中将lat和long的值粘贴在一起。

此外,除了额外的计算之外,SQRT不会为您提供任何帮助。您可以轻松地对平方值进行排序,结果相同。

ORDER BY ((((".$long.")-LONG) * ((".$long.")-LONG))+
          (((".$lat. ")-LAT ) * ((".$lat. ")-LAT )))

此类型的示例非常适合我当地的美国邮政编码文件。

SELECT * 
FROM ZIP 
ORDER BY ((latitude-(42.811261)) * (latitude-(42.811261)))+
         ((longitude-(-70.877264))*(longitude-(-70.877264)))

此外,您的位置最好不要靠近任何一个极点或超过大约15兆平方米,否则您使用的这个矩形近似将会非常惊人地分崩离析。如果他们距离那么远,你将需要使用一个大圆距离计算公式。

答案 1 :(得分:0)

似乎mysql可能会被long AS LONG弄糊涂......我想知道是否mysql认为它应该是存储过程中的Dim语句的一部分。在任何情况下,mysql都不允许我将列别名为LONG ...我尝试将其更改为LONGX,并且它有效。

不过,我使用的是mysql 5.1.4 - 不确定这是否对版本

敏感