我必须查询一些靠近城市的对象。它们必须根据用户的位置进行排序。
所以我决定编写一个SQL查询,它使用的是毕达哥拉斯公式的两倍。
它似乎得到了好的对象(靠近城市),但未能根据用户的位置正确分类。
你知道我是正确使用SQL还是错误的公式?
数据
在下面的查询中…
用户位置
城市定位
-
四十八点五一六六六七零零
-
-2.7833 3300
找到对象的位置
最接近用户对象
-
四亿七千六百五十九万三千四百八十四
-
- 27546085
对用户对象最远
-
四亿八千四百九十六万二千三百八十五
-
- 27642788
查询
SELECT *,
SQRT((48.51666700 - lat) * (48.51666700 - lat) + ((-2.78333300 - lon) * COS(RADIANS(lat))) * ((-2.78333300 - lon) * COS(RADIANS(lat)))) * 111.325 AS distance,
SQRT((47.64331000 - lat) * (47.64331000 - lat) + ((-2.80565500 - lon) * COS(RADIANS(lat))) * ((-2.80565500 - lon) * COS(RADIANS(lat)))) * 111.325 AS distance_2
FROM restaurants WHERE 1=1 AND visible = 1 HAVING distance < 200 ORDER BY distance_2 ASC
显示顺序
最远的对象显示在最近的对象之前,这是不正常的(见下一部分)。