2011-12-25 7 views
2

Я искал stackoverflow и получил ответ на свой вопрос, но когда я попытался реализовать его с моим кодом, я получил странные ошибки.Ошибка SQL для вычисления большого круга

вот код:

SELECT `zip_code`, (6371 * acos(cos(radians($latitude)) * cos(radians(`lat`)) * cos(radians(`long`) - radians($longitude)) + sin(radians($latitude)) * sin(radians(`lat`)))) AS `distance` 
FROM `places` 
HAVING `distance` < $within 
ORDER BY `distance` ASC 
LIMIT 10; 

Я получаю следующее сообщение об ошибке:

Incorrect parameter count in the call to native function 'radians'

Я использую MySQL версии 5.1.44

+0

Возможно ли иметь NULLS в полях. Я думаю, что значение null, переданное функции, может вернуть эту ошибку. – Sparky

+0

Был ли запущен этот сценарий из сценария оболочки? Были ли значения '$ широты' и' $ longitude' заданы? –

+0

да, им были присвоены значения, а значения NULL – Grigor

ответ

3

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

53779 градусов долготы 4566 градусов широты

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

Решение состоит в том, чтобы сделать некоторые изменения «на лету», чтобы отформатировать аргументы степени с периодом как разделителем вместо запятых.