У меня проблемы с поиском по радиусу.
У меня есть таблица с почтовыми индексами, названиями мест и географическими координатами (на основе OpenGeoDB).
Вот моя SQL-команда:
SELECT main.zc_zip,
(ACOS(
SIN(RADIANS(main.zc_lat)) * SIN(RADIANS(geo.zc_lat))
+ COS(RADIANS(main.zc_lat)) * COS(RADIANS(geo.zc_lat))
* COS(RADIANS(main.zc_lon) - RADIANS(geo.zc_lon))
) * 6380) AS `distance`
FROM tx_sdfilmbase_geodb main
LEFT JOIN tx_sdfilmbase_geodb geo ON geo.zc_location_name LIKE '%frauenfeld%'
WHERE
(ACOS(
SIN(RADIANS(main.zc_lat)) * SIN(RADIANS(geo.zc_lat))
+ COS(RADIANS(main.zc_lat)) * COS(RADIANS(geo.zc_lat))
* COS(RADIANS(main.zc_lon) - RADIANS(geo.zc_lon))
) * 6380) < 20
AND main.disabled=0
ORDER BY `distance` ASC
Я получаю результаты для всех мест вокруг Фрауэнфельда в радиусе 20 километров.
Тем не менее, я не получаю никакого результата для местоположений с именем «frauenfeld» - то есть я получаю все окружающие места, но не сам поиск.
Как мне изменить SQL, чтобы получить само место?
Я пробовал разные вещи, но всегда один и тот же результат ...
Был бы рад некоторым подсказкам.
Greets
Stefan
Изменить, чтобы ответить на комментарии ypercube и Мэтта Гибсона:
На данный момент все записи в таблице базы данных отключены = 0.
Среди многих других я получаю следующие результаты (zip, distance):
- 8552 3,7661608052471
- 8500 4.184731709915
- 8523 4.9298917004071
- 9548 4.9771821340396
Почтовые индексы для Frauenfeld: 8500, 8501, 8502 и 8503.
Отсутствующие записи в результате будут (почтовый индекс, расстояние):
- 8500 0
- 8501 0
- 8502 0
- 8503 0
Однако данные в базе геоданных верны (zip, место, широта, долгота):
- 8503 Фрауэнфельд 47,557707 8,897367
- 8502 Фрауэнфельд 47,557707 8,897367
- 8501 Frauenfeld 47,557707 8,897367
- 8500 Фрауэнфельд 47.557707 8.897367
Изменить, чтобы ответить на ответ куру куру па:
Спасибо за ваш ответ!
Ответ теперь выглядит следующим образом (zc_location_name, zc_zip, отключено, расстояние):
Frauenfeld 8500 0 NULL
Frauenfeld 8503 0 NULL
Frauenfeld 8502 0 NULL
Frauenfeld 8501 0 NULL
Gerlikon 8500 0 4.18473170991499
Почему это NULL, а не 0? Есть догадки? :-)
Кстати: каждый результат был указан 4 раза (я только что опубликовал каждый раз).