이제 현재 위치의 경도와 위도를 기준으로 데이터 테이블에서 2km 근처의 5개 장소를 쿼리하고 싶은데요. 쿼리 결과에 5개 위치가 포함되어 있지 않으면 5개가 발견될 때까지 근처 범위. 위치 위치. 저는 두 가지 옵션을 생각했습니다.
첫 번째 옵션은 sql 문으로 완전히 구현하는 것인데, sql 문으로 완전히 구현한다면 이런 sql을 어떻게 작성해야 할지 모르겠습니다.
두 번째 옵션은 먼저 쿼리한 후 사업 성과를 기준으로 판단하는 것입니다. 5개 위치가 충족되지 않으면 주변 범위를 확장하고 5개 위치를 찾을 때까지 데이터베이스에 다시 쿼리합니다.
두 가지 옵션 중 어느 것이 더 효율적인지 모르겠습니다. 조언을 부탁드립니다. 정말 감사합니다.
이제 현재 위치의 경도와 위도를 기준으로 데이터 테이블에서 2km 근처의 5개 장소를 쿼리하고 싶은데요. 쿼리 결과에 5개 위치가 포함되어 있지 않으면 5개가 발견될 때까지 근처 범위. 위치 위치. 저는 두 가지 옵션을 생각했습니다.
첫 번째 옵션은 sql 문으로 완전히 구현하는 것인데, sql 문으로 완전히 구현한다면 이런 sql을 어떻게 작성해야 할지 모르겠습니다.
두 번째 옵션은 먼저 쿼리한 후 사업 성과를 기준으로 판단하는 것입니다. 5개 위치가 충족되지 않으면 주변 범위를 확장하고 5개 위치를 찾을 때까지 데이터베이스에 다시 쿼리합니다.
두 가지 옵션 중 어느 것이 더 효율적인지 모르겠습니다. 조언을 부탁드립니다. 정말 감사합니다.
두 가지 옵션을 전혀 이해하지 못합니다.
먼저 논리를 단순화할 수 없나요?
귀하의 요청은 다음과 같지 않습니까: 가장 가까운 5개 위치를 쿼리하세요. 왜 우리는 2킬로미터 이내인지 2킬로미터 떨어져 있는지를 구별해야 합니까?
최신 5개 항목을 쿼리할 경우 비즈니스 판단을 고려해야 하는 이유는 무엇입니까? 직접 SQL로 한도를 설정하는 것만으로는 충분하지 않습니까?
두 번째 옵션은 SQL을 사용하여 완전히 구현됩니다. 더 높은 효율성을 달성하려면 데이터 계층과 비즈니스 계층을 별도로 실행해야 합니다.
Amap LBS Cloud가 필요합니다. 귀하의 요구를 충족시켜 드립니다
mysql 공간좌표 데이터베이스를 사용해 보세요
<code>CREATE TABLE `spa` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(32) DEFAULT NULL, `loc` point DEFAULT NULL, /* ^---------------------------------- 保存经纬度 */ PRIMARY KEY (`id`) )</code>
<code>/* 查询 */ SELECT * FROM spa WHERE DISTANCE(POINT($当前经度, $当前纬度), loc) < ($距离(单位米) / 111195) LIMIT 5; /* ^-----单位为度 ^---1度多少米 */</code>정렬을 원하시면 거리순으로 주문하시면 됩니다.
GEOHASH를 사용하여 2D 좌표를 문자열로 변환한 후 비교해야 합니다