我在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
答案 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;,特别是如果您要扫描数千行。)