Нестабильные MySQL st_distance_sphere результаты - PullRequest
2 голосов
/ 11 марта 2019

Результаты, полученные из MySQL при использовании st_distance_sphere, кажутся действительно нестабильными.

Выполнение этого запроса в таблице пользователей: (список пользователей в пределах 9,45 км от точки)

select *, st_distance_sphere(`location`, ST_GeomFromText('point(-74.0104915 45.5576996)')) as distance from `users` having `distance` < 9450

возвращает правильные результаты.

но удаляет 1 метр из радиуса в запросе:

select *, st_distance_sphere(`location`, ST_GeomFromText('point(-74.0104915 45.5576996)')) as distance from `users` having `distance` < 9449

дает мне эту синтаксическую ошибку SQL: #1210 - Incorrect arguments to st_distance_sphere

Я также заметил, что добавление оператора limit изменяет точку, в которой запрос прерывается, в зависимости от номера лимита.

У кого-нибудь был подобный опыт с запросами такого типа? У меня проблемы с выяснением того, что здесь происходит.

Я использую MySQL 5.7

Спасибо!

Edit: Дальнейшее тестирование показывает, что запрос отлично работает на небольших наборах (<~ 2-3 тыс. Строк), но начинает выходить за пределы этого, очень странно. </p>

1 Ответ

1 голос
/ 11 марта 2019

После множества испытаний я наконец-то обнаружил причину нестабильности:

Один пользователь имел неверную координату широты / долготы в базе данных (-100, 100), вероятноиз-за вмешательства человека через phpmyadmin.

Широта должна быть в диапазоне от -90,0 до 90,0, а долгота в диапазоне от -180,0 до 180,0

Когда этот пользователь оказался в радиусе одного из наших поисков,запрос потерпел крах.Вот почему все параметры оказали влияние на ошибку (определение предела, диапазон радиуса и центральная точка).Как только пользователь ввел результат, дело пошло чокнутым.

Извлеченный урок, защитите свои данные!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...