Mysql запрос для поиска округленных чисел - PullRequest
4 голосов
/ 06 июня 2019

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

Также я не хочу искать город по названию, потому что название города может измениться, если набрано на другом языке, (например, Киев - Киев, Женева, Женева, Генф и т. Д.), Координаты не меняются много.

Итак, я использую Google API, чтобы получить лат, длинный от названия города, который возвращает что-то вроде этого:

Для города Киева: (Google) Latitude : 50.4501 , Longitude= 30.5234 (округлено до: 50,45 - 30,52)

Однако, в моей таблице погоды, город записан как Киев и имеет следующие координаты: Latitude : 50.4333 , Longitude= 30.5167

Итак, как мне теперь перейти к поиску в моей таблице погоды, чтобы найти округленные значения координат (хранящиеся в виде чисел с плавающей запятой)

SELECT * FROM weather_cities WHERE Latitude='50.45' AND Longitude='30.52'

Приведенный выше запрос не будет работать, потому что широта в mysql (50.4333) будет округлена до 50.44, а не 50.45. Если бы я снизил точность только до одного десятичного знака, это было бы, но в других случаях я получал бы слишком много соответствующих городов.

Я хотел бы искать в числах с плавающей точкой самые близкие / ближайшие значения в mysql, не выводя слишком много результатов. Что вы посоветуете мне для достижения ожидаемого результата? Я использовал mysql и php.

Я посмотрел на это решение: https://leehblue.com/match-a-float-in-mysql/, а также на это: PHP Как округлить до двух десятичных знаков? но я застрял.

Ответы [ 2 ]

3 голосов
/ 06 июня 2019

Для значений с плавающей запятой стандартно НЕ использовать проверки на равенство.Вместо этого используйте вычитание:

SELECT * FROM weather_cities WHERE ABS(Latitude-50.45)<0.01 AND ABS(Longitude-30.52)<0.01

Вы также можете отсортировать по абсолютному расстоянию от округленной координаты, чтобы определить, какой город находится ближе всего.Недостатком здесь является то, что он не будет использовать индекс широты и долготы, потому что вы используете эти поля в математическом выражении.

0 голосов
/ 06 июня 2019

Попробуйте этот запрос

Mysql Rounded() function description

SELECT ROUND(weather_cities.Latitude,2),ROUND(weather_cities.Longitude,2) FROM weather_cities WHERE Latitude=12.2500 AND Longitude=54.1235

надеюсь, что запрос вернет желаемый результат. Спасибо.

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