На своем сайте я пытаюсь найти места поблизости.
Я пытаюсь использовать для этого формулу Хаверсина.
Я использую следующий запрос, чтобы получить все местоположения в радиусе 25 км.
SELECT id, ( 6371 * acos( cos( radians(51.8391) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(4.6265) ) + sin( radians(51.8391) ) * sin( radians( lat ) ) ) ) AS distance
FROM shops
HAVING distance < 25
ORDER BY name asc
Однако я думаю, что некоторые функции могут быть только MySQL, потому что я получаю следующую ошибку:
Предупреждение: PDOStatement :: execute () [pdostatement.execute]: SQLSTATE [42883]: неопределенная функция: 7 ОШИБКА: функция радианы (текст) не существует СТРОКА 1: ... id , (6371 * acos (cos (радианы (51.8391)) * cos (радианы (l ... ^ ПОДСКАЗКА: ни одна функция не соответствует заданному имени и типам аргументов. Возможно, потребуется добавить явное приведение типов. In ...
Или, возможно, это связано с тем, что мне нужно изменить текст lat
в моем запросе.Но я не знаю, что это должно быть.
51,8391 и 4,6265 - долгая и широта моей «отправной» точки.
Любая помощь приветствуется, так как я не знаю, что изменить: - )
РЕДАКТИРОВАТЬ
Похоже, проблема в том, где я пытаюсь сделать: радианы (широта)
.
широта - столбец в моей таблице.
Когда я пытаюсь используйте rad ()
, поскольку hakre предположил, что ошибка изменяется на: функция rad (числовой) не существует
РЕДАКТИРОВАТЬ 2
Теперь мы кое-что угадали.
Тип данных столбцы, которые действительно установлены как текст (как предлагает mu, слишком короткие).
Я изменил его на двойную точность.
Однако теперь я получаю другую ошибку:
Предупреждение: PDOStatement :: execute () [pdostatement.execute]: SQLSTATE [42703]: Неопределенный столбец: 7 ОШИБКА: столбец "расстояние" не существует СТРОКА 1: ... adians (lat)))) КАК расстояние ОТ магазинов ИМЕЕТ расстояние <... in ...>
Но я подумал, что сделал псевдоним в выборе. Есть идеи?
Также, если вы думаете, что это должно быть в другом вопросе, просто дайте мне знать, и я закрою этот.