Как удалить дубликаты записей при использовании UNION

Я использую 2 широты и 2 долготы в таблице MySQL Из-за некоторых записей, имеющих несколько мест, поэтому я объединяю записи широты и долготы. Но при объединении записей с использованием 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

Решение

UNION DISTINCT сравнивает весь ряд Это включает distance, Но, если я понимаю ваше описание, эти два расстояния, вероятно, будут разными.

План А: Не вернуть расстояние:

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

План Б: Использование OR:

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

(Ни один из них не будет «быстрым», особенно если у вас есть тысячи строк для сканирования.)

0

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

Других решений пока нет …

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