MySQL фильтрует данные по расстоянию и вычисляет это расстояние - PullRequest
0 голосов
/ 26 ноября 2018

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

Мой столик в ресторане.

res_name    |   lat         |   lng
--------------------------------------------------------------
McDonalds'  |   6.8705452   |   79.884038
KFC     |   6.8705452   |   79.884038
Burger king |   6.8686279   |   79.8873961
--------------------------------------------------------------

Чтобы найти записи, которые совпадают с радиусом в милях для предоставленных пользователем координатЯ могу использовать этот запрос

SELECT
  id, (
    3959 * acos (
      cos ( radians(78.3232) )
      * cos( radians( lat ) )
      * cos( radians( lng ) - radians(65.3234) )
      + sin ( radians(78.3232) )
      * sin( radians( lat ) )
    )
  ) AS distance
FROM markers
HAVING distance < 30
ORDER BY distance
LIMIT 0 , 20;

это также я получил от вопроса stackoverflow, и он работает.Теперь моя проблема заключается в том, как определить расстояние между местоположением пользователя и местоположением ресторана для каждого соответствующего результата?

Надеюсь, мой запрос вам понятен.

Пользователь передаст свое текущее местоположение.Исходя из этого местоположения, мне нужно отфильтровать рестораны в радиусе 30 миль.В то же время я должен сказать расстояние до ресторана от его текущего местоположения.

Мой ожидаемый результат будет таким.У вас есть два ресторана в районе 30 миль.для KFC у вас есть расстояние 12 миль.для McDonalds 'у вас есть расстояние 29 миль.

Как мне изменить этот запрос, чтобы выполнить мое требование?

1 Ответ

0 голосов
/ 26 ноября 2018

Для нахождения расстояния часть

SELECT test2.restaurants.res_name, 
   111.111 *
    DEGREES(ACOS(COS(RADIANS(6.9117))
         * COS(RADIANS(test2.restaurants.lat))
         * COS(RADIANS(79.8646 - test2.restaurants.lng))
         + SIN(RADIANS(6.9117))
         * SIN(RADIANS(test2.restaurants.lat)))) AS distance_in_km
  FROM test2.restaurants;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...