供应商半径限制的半径查询

时间:2016-08-17 19:08:10

标签: mysql sql postgresql

我在下面有以下半径查询。第一个选择将获得4英里内的每条记录。 (只是为了简单起见,这个例子中的zip只是一个主键,不应该被认为是一个真正的zip。我只是试图将其建模为给定long / lat中的供应商。)< / p>

在纬度43和经度-74.37

的4英里范围内返回5条记录

我想要做的是一旦找到记录,然后对使用限制列找到的记录进行反向选择作为我的新半径限制,以消除供应商不希望在外部找到的记录离他们的实际位置特别的距离。

在我下面的查询示例中,我希望找到除fonda 12068之外的所有结果,因为该记录虽然距离第一个选择只有4英里,但只希望在其物理位置的1英里(限制列)内可见。然而,图像是产生的实际结果。有人能帮我理解我做错了什么吗?

我的想法是我可以使用long / lat以及第一个查询结果的限制来查看是否返回了与原始zip匹配的zip。

SELECT zip1.* FROM zip_detail as zip1 
    WHERE (3958*3.1415926*sqrt((latitude-43)*(latitude-43) 
    + cos(latitude/57.29578)*cos(43/57.29578)
    *(longitude- -74.37)*(longitude- -74.37))/180) 
    <= 4

and zip1.zip in (SELECT zip2.zip FROM zip_detail as zip2 
    WHERE (3958*3.1415926*sqrt((latitude-zip1.latitude)*(latitude-zip1.latitude) 
    + cos(latitude/57.29578)*cos(zip1.latitude/57.29578)
    *(longitude- zip1.longitude)*(longitude- zip1.longitude))/180) 
    <= zip1.restriction)

enter image description here

我创建了一个sqlfiddle示例

0 个答案:

没有答案