Я должен запросить некоторые объекты, которые находятся недалеко от города.Они должны быть отсортированы в соответствии с местоположением пользователя.
Поэтому я решил написать SQL-запрос, в котором дважды используется формула Пифагора.
Кажется, что получаются хорошие объекты (недалеко от города), но не удается правильно отсортировать их в соответствии с местоположением пользователя.
Знаете ли вы, правильно ли я использую SQL, или это неправильная формула?
Данные
В следующем запросе ...
distance
хранит расстояние между объектами и городом.
distance_2
хранит расстояние между объектами и местоположением пользователя.
lat
и lon
- координаты объектов.Запрос действительно выполняется в таблице объектов.
Местоположение пользователя
Местоположение города
Местоположение найденных объектов
Объект, ближайший к пользователю
Объект наименьшего к пользователю
Запрос
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
Порядок отображения
Ближайший объект отображается перед ближайшим, что ненормально (см. Следующую часть).