我有这个代码应该(希望)得到最接近给定位置的结果:
$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";
由于某种原因,它根本不起作用。我认为是因为我在计算中错误地使用了列名...
有什么想法吗?
谢谢
答案 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,并且它有效。