Я использую 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
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
(Ни один из них не будет «быстрым», особенно если у вас есть тысячи строк для сканирования.)
Других решений пока нет …