SQL Как выбрать свойства из заданных нескольких пригородов в диапазоне 5 км с заданными пригородами?

У меня есть две таблицы, как показано ниже:

tbl_properties а также tbl_postcodes

Он должен перечислить свойства в ближайших 5 км выбранных почтовых индексов.

Я пытаюсь получить результат с помощью запроса ниже, но он не получает правильных результатов.

SELECT* FROM (

ВЫБЕРИТЕ стр. *,
КРУГЛЫЙ(
60 * 1.1515 * 1.609344 * Градусы (
АКОС (
COS (RADIANS (шт.latitude)) * COS (RADIANS (стр.lat)) * COS (RADIANS (шт.longitude — п.lng)) + SIN (RADIANS (шт.latitude)) * SIN (RADIANS (стр.lng))
)
),
2
) Как расстояние

ОТ properties AS p JOIN postcodes_geo AS pc ON (стр.postcode_id = шт.id)

ГДЕ p.postcode_id IN (792,790,786,12613)
) КАК ФУТБОЛ ГДЕ ДЛИНА <= 5

0

Решение

Ниже приводится веб-служба, которая предоставляет ту же функцию, которая требуется для поиска по почтовому индексу.

http://www.geonames.org/export/web-services.html

Здесь вы можете передать почтовый индекс и радиус в качестве параметра, и он вернет список почтовых индексов, связанных с этим в формате XML и JSON.

например: http://api.geonames.org/findNearbyPostalCodesJSON?postalcode=2032&страна = AU&Радиус = 10&имя пользователя = демо

0

Другие решения

@krishna как насчет запроса, как

SELECT *
FROM (
SELECT properties.*
,(111.045000 * DEGREES(ACOS(COS(RADIANS(- 33.867487)) * COS(RADIANS(lat)) * COS(RADIANS(151.206990 - lng)) + SIN(RADIANS(- 33.867487)) * SIN(RADIANS(lat))))) AS distance
FROM `properties`
WHERE `properties`.`deleted_at` IS NULL
AND lat BETWEEN - 33.912514
AND - 33.822460
AND lng BETWEEN 151.152763
AND 151.261218
) AS properties
WHERE `properties`.`deleted_at` IS NULL

UNION

SELECT *
FROM (
SELECT properties.*
,(111.045000 * DEGREES(ACOS(COS(RADIANS(- 33.914437)) * COS(RADIANS(lat)) * COS(RADIANS(151.241642 - lng)) + SIN(RADIANS(- 33.914437)) * SIN(RADIANS(lat))))) AS distance
FROM `properties`
WHERE `properties`.`deleted_at` IS NULL
AND lat BETWEEN - 33.959464
AND - 33.869411
AND lng BETWEEN 151.187384
AND 151.295899
) AS properties
WHERE `properties`.`deleted_at` IS NULL

UNION

SELECT *
FROM (
SELECT properties.*
,(111.045000 * DEGREES(ACOS(COS(RADIANS(- 33.914437)) * COS(RADIANS(lat)) * COS(RADIANS(151.241642 - lng)) + SIN(RADIANS(- 33.914437)) * SIN(RADIANS(lat))))) AS distance
FROM `properties`
WHERE `properties`.`deleted_at` IS NULL
AND lat BETWEEN - 33.959464
AND - 33.869411
AND lng BETWEEN 151.187384
AND 151.295899
) AS properties
WHERE `properties`.`deleted_at` IS NULL Limit 10
,10

Это может помочь вам по мере необходимости, но вам нужно немного потренироваться для подготовки запроса

-1

По вопросам рекламы [email protected]