Я работаю над геолого-пространственным поиском, где я ищу близлежащие точки. Я это Haversine запрос будучи набегать в таблице:Выбор уникальных записей
SELECT
uid, adrLat, adrLng,
round(3956 * 2 * ASIN(SQRT(POWER(SIN((39.97780609 - abs(adrLat)) * pi()/180/2), 2) + COS(39.97780609 * pi()/180) * COS(abs(adrLat) * pi()/180) * POWER(SIN((-105.25861359 - adrLng) * pi()/180/2), 2))), 2) AS distance
FROM dataPoints
WHERE adrLng BETWEEN -105.2680699902 AND -105.2491571898
AND adrLat BETWEEN 39.970559713188 AND 39.985052466812
HAVING distance <= 0.30 and distance > 0.00
ORDER BY distance;
Это дало бы мне результат так же, как это:
+-----+-------------+---------------+----------+
| uid | adrLat | adrLng | distance |
+-----+-------------+---------------+----------+
| 191 | 39.97764587 | -105.25627136 | 0.12 |
| 520 | 39.97746658 | -105.25627136 | 0.13 |
| 265 | 39.97560120 | -105.25814056 | 0.15 |
| 266 | 39.97560120 | -105.25814056 | 0.15 |
| 274 | 39.97710037 | -105.25589752 | 0.15 |
| 98 | 39.97764969 | -105.26172638 | 0.17 |
| 576 | 39.97967911 | -105.25613403 | 0.18 |
| 575 | 39.97967911 | -105.25613403 | 0.18 |
| 469 | 39.97895813 | -105.25386810 | 0.26 |
| 470 | 39.97895813 | -105.25386810 | 0.26 |
| 1 | 39.98003006 | -105.25471497 | 0.26 |
| 383 | 39.97621155 | -105.26350403 | 0.28 |
| 431 | 39.97459793 | -105.25507355 | 0.29 |
| 430 | 39.97459793 | -105.25507355 | 0.29 |
| 429 | 39.97459793 | -105.25507355 | 0.29 |
| 428 | 39.97459793 | -105.25507355 | 0.29 |
+-----+-------------+---------------+----------+
Однако, как вы, вероятно, может сказать, некоторые записи дублируются в таблице (таким образом данные мне предоставлены, и я должен сохранить их таким образом.) 265: 266, 576: 575, 469: 470 и 431-428 - все дубликаты.
Есть ли способ изменить запрос, чтобы выбрать уникальные записи? Похоже, мне приходится сопоставлять adrLat и adrLng, чтобы отфильтровать дубликаты, но я не уверен, могу ли я сделать все это в рамках одного и того же запроса или если мне нужно выполнить некоторую пост-обработку результата.
Есть ли причина, по которой вы не используете функции 'ПРОСТРАНСТВЕННЫЙ' (и индексы)? – Quassnoi
Да, когда этот проект начался, ни я, ни другой разработчик ничего не знали о пространственной поддержке MySQL. И кодирование формулы Хаверсина было без проблем. Возможно, следующий проект ... – KirAsh4