SQL如何从给定郊区的5KM范围内的给定多个郊区中选择属性?

时间:2016-01-08 10:29:13

标签: php mysql sql properties postal-code

我有两个表格如下所示:

tbl_propertiestbl_postcodes

它应列出所选邮政编码周围5公里内的特征。

我正在尝试使用以下查询获得结果,但未获得正确的结果。

SELECT* FROM (

SELECT p。*,    回合(       60 * 1.1515 * 1.609344 * DEGREES(     ACOS(       COS(RADIANS(pc。latitude))* COS(RADIANS(p。lat))* COS(RADIANS(pc。longitude - p。lng))+ SIN(RADIANS(pc。latitude))* SIN(RADIANS(p。lng))     )       )       2     )AS距离

FROM properties AS p JOIN postcodes_geo AS pc ON(p。postcode_id = pc。id

在哪里p.postcode_id IN(792,790,786,12613) )AS ftbl WHERE距离< = 5

2 个答案:

答案 0 :(得分:0)

以下是提供基于邮政编码搜索所需的相同功能的网络服务。

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

在这里你可以传递postcode和radius作为参数,它将返回与XML和JSON格式相关的zipcodes列表。

例如:http://api.geonames.org/findNearbyPostalCodesJSON?postalcode=2032&country=AU&radius=10&username=demo

答案 1 :(得分:-1)

@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

这可能会根据您的需要为您提供帮助,但您需要花点时间来准备查询