2013-03-11 4 views
1

위도 \ 경도 점의 DB가 있습니다. DISTINCT 결과를 거리별로 정렬하려고합니다. 내 검색어는 다음과 같습니다.MySQL에서 명확한 ROUNDED 결과

SELECT 
    DISTINCT ROUND(`lat`,2), ROUND(`lon`,2), 
    (3959 * acos(cos(radians(LAT_HERE)) 
      * cos(radians(`lat`)) 
      * cos(radians(`lon`) - radians(LONG_HERE)) 
      + sin(radians(LAT_HERE)) 
      * sin(radians(`lat`)))) AS distance 
FROM `user_data` 
HAVING distance <= 99 
ORDER BY distance 
LIMIT 100 

별 앞에는 달리고 있습니다. 예를 들어 (29.333,29.334), (29.331,29.332)는 두 번 표시됩니다.

답변

1

시도의 사용은 GROUP BY

SELECT ROUND(`lat`,2), ROUND(`lon`,2), 
        (3959 * acos(cos(radians(LAT_HERE)) 
        * cos(radians(`lat`)) 
        * cos(radians(`lon`) - radians(LONG_HERE)) 
        + sin(radians(LAT_HERE)) 
        * sin(radians(`lat`)))) AS distance 
       FROM `user_data` 
       GROUP BY ROUND(`lat`,2) 
       HAVING distance <= 99 
       ORDER BY distance 
       LIMIT 100 
+0

정확히. 고맙습니다. – user2072710

+0

당신을 환영합니다! :) –

0

사실 당신은 정확하지 않습니다. DISTINCT는 이전에 평가 된 결과에서 실행됩니다. 예를 들어 실행 :

select distinct round(a,2), round(b,2) 
from ((select 29.333 as a,29.334 as b) union (select 29.331,29.332)) t3; 

결과는 다음과 같습니다

+------------+------------+ 
| round(a,2) | round(b,2) | 
+------------+------------+ 
|  29.33 |  29.33 | 
+------------+------------+ 
+0

나는 한 번만 29.33을 표시합니다. 두 번 표시하고 싶지 않습니다. 그게 내 문제 야. 내가 설명하지 않으면 미안해. – user2072710

+0

@ user2072710 OP에서는 경도, 위도 및 거리라는 3 개의 열을 선택합니다. 당신의 목적은 무엇입니까? 그 중 하나는 필요 없습니까 - SELECT 절에서 제거하십시오. –