지역 및 위도/경도 위치 열이 있는 MySQL 테이블이 있습니다. 각 지역에는 20.000
。有没有办法只选择几个,比如 100
등 여러 위치가 있는데, 지도에 고르게 분포되어 있는 것 같죠?
배포가 완벽할 필요는 없으며 쿼리 속도가 더 중요합니다. MySQL을 직접 사용하여 이것이 가능하지 않은 경우 매우 빠른 알고리즘을 사용하여 균등하게 분산된 위치를 선택할 수 있습니다.
미리 감사드립니다.
EDIT: 댓글에 일부 요청에 대한 답변이 있습니다. 데이터에는 관련 작업이 없으며 단지 지역 및 위치 좌표만 있습니다. 예:
으아아아특성이 있는 열도 있지만 필터링에만 사용됩니다.
저는 nth
행을 모두 가져오려고 노력했는데 조금 느리기는 하지만 제대로 작동하는 것 같습니다
사용random()
도 작동하지만 약간 느립니다.
편집 2: 양식에 우편번호를 추가하는 것이 쉬운 것으로 나타났습니다. 이를 통해 우편번호별로 그룹화하면 만족스러운 결과를 얻을 수 있을 것 같습니다. 유일한 문제는 약 3000개의 서로 다른 우편번호로 구성된 매우 넓은 지역이 있으며 그 중 100개만 가져오면 많은 우편번호가 한 곳에 표시될 수 있으므로 PHP에서 추가 처리가 필요할 수 있다는 것입니다.
Edit3, @RickJames의 질문에 댓글을 달아 한 곳에 모아두세요:
AUTO_INCRMENT
아이디가 있고 공백이 있을 수 있습니다1000
,我们希望仅显示随机的 100
。如果 1000
보다 많거나 적다면 그냥 다 보여주면 됩니다
이것은 목표를 달성할 수 있는 방법입니다.
테이블을 사전 처리하고 새 테이블을 만들어 "중복" 항목을 제거하세요.-
새 테이블이 충분히 작으면 전체 스캔이 충분히 빠를 수 있습니다. -
"중복"의 경우 두 항목이 같은 위치에 있는지 알아내는 대략적인 방법이라고 생각하세요.으아아아
"5"와 "3"은 더 많은(또는 더 적은) ID를 유지하기 위해 위(또는 아래)로 조정될 수 있습니다. 위도/경도 배열로 인해 "5"와 "3"은 다르며, 이 비율은 대부분의 온대 지역에서 적용됩니다. (적도 근처에서는 동일한 양을 사용하고, 위도가 높을수록 더 많은 양을 사용합니다.)에 의해 생성된 경계를 넘을 수 있습니다.
원래 테이블에는 몇 개의 행이 있나요? 위 쿼리는 몇 개의 행을 생성했습니까? (ROUNDs
)
SELECT COUNT(*) FROM ( ... ) x;