如何在使用UNION

时间:2016-12-06 18:35:35

标签: php mysql latitude-longitude

我在mysql表中使用2纬度和2经度因为有些记录有多个地方所以我加入纬度和经度记录。但是在使用UNION加入记录时,会创建一些早先出现的重复记录。那么,如何避免重复记录。有人可以帮助我。

如何创建重复记录。 例如,一个记录有2个位置,它们之间的距离是500公里,但是当我们使用HAVING距离超过500公里时。纬度将拉一次记录,tatitude1将拉一次记录。所以我们可以得到两条记录。所以,这就是问题所在。

 SELECT * , (6371 * acos(cos(radians($Latitude)) * cos(radians(latitude)) * cos(radians(longitude) - radians($Longitude)) + sin(radians($Latitude)) * sin(radians(latitude)))) AS distance 
 FROM mytable
 HAVING distance < $Distance

       UNION DISTINCT

 SELECT * , (6371 * acos(cos(radians($Latitude)) * cos(radians(latitude1)) * cos(radians(longitude1) - radians($Longitude)) + sin(radians($Latitude)) * sin(radians(latitude1)))) AS distance 
       FROM mytable
 HAVING distance < $Distance
 ORDER BY distance

1 个答案:

答案 0 :(得分:0)

UNION DISTINCT比较整行。这包括distance。但是,如果我理解你的描述,两个距离可能会有所不同。

计划A:不返回距离:

( SELECT * FROM tbl
      WHERE (big-long-forumula) < $Distance )
UNION DISTINCT
( SELECT * FROM tbl
      WHERE (other formula) < $Distance )

B计划:使用OR

SELECT *,
       (...) AS distance1,
       (...) AS distance2
    FROM tbl
    HAVING distance1 < $Distance
        OR distance2 < $Distance

(两者都不会快速&#39;,特别是如果您要扫描数千行。)