2013-03-11 49 views
1

我有一個緯度\經度點數據庫。我正在嘗試按距離排序的DISTINCT四捨五入結果。我的查詢如下:MySQL中的不同圓角結果

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 2013-03-11 19:48:36

+0

歡迎您! :) – 2013-03-11 19:48:59

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 2013-03-11 19:27:59

+0

@ user2072710在OP中,選擇3列:經度,緯度和距離。你的目的是什麼?你不需要其中的一個 - 只是從你的SELECT子句中刪除它。 – 2013-03-11 19:33:09