我必须查询一些靠近城市的对象。它们必须根据用户的位置进行排序。
所以我决定编写一个使用两倍毕达哥拉斯公式的 SQL 查询。
它似乎得到了好的对象(靠近城市),但它未能根据用户的位置正确分类它们。
你知道我是否正确使用 SQL 还是公式出错了?
数据
在以下查询中...
distance
存储对象与城市之间的距离。distance_2
存储对象与用户位置之间的距离。lat
lon
是物体的坐标。查询确实在对象表中执行。
用户位置
- 47.643310
- -2.805655
城市的位置
48.51666700
-2.78333300
找到对象的位置
最接近用户的对象
47,6593484
-2,7546085
Farest-to-the-user 对象
48,4962385
-2,7642788
询问
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
展示顺序
最远的对象显示在最近的对象之前,这是不正常的(见下一部分)。