2012-09-07 20 views
2

應用獨特的選擇我有類似下面的表格: -如何在MySQL的只是一列

 
Table: deals 
+----+-------+----------+----------+------------+ 
| ID | name | latitude | longitude| end_date | 
|----+-------+----------+----------+------------+ 
| 1 | pizza | 10.5 | -10.5 | 2012-12-12 | 
| 2 | pizza | 11.5 | -10.5 | 2012-12-12 | 
| 3 | jelly | 21.5 | -10.5 | 2012-12-12 | 
| 4 | jelly | 23.5 | -10.5 | 2012-12-12 | 
| 5 | lily | 19.5 | -10.5 | 2012-12-12 | 
+----+-------+----------+----------+------------+ 

我使用的latitudelongitude找到該人的距離。但我需要的結果是DISTINCT根據name。我還需要根據我計算的距離對結果進行排序並應用極限值0,3。

我目前使用的查詢是「 -

SELECT *, 
    (6371 * Acos(Cos(Radians(9.939625)) * Cos(Radians(lat)) * Cos(
           Radians(lng) - Radians(76.259498)) + 
          Sin(Radians(9.939625)) * Sin(Radians(lat)))) AS 
    distance 
FROM deals 
WHERE 1 
    AND end_date >= Now() 
HAVING distance < 20000 
ORDER BY id DESC, 
     distance 
LIMIT 0, 3; 

因此,在短期,我需要的是: -

  1. 名單的最近交易(按距離排序)
  2. 應用不同於name(以便披薩和果凍只會出現一次)
+0

在可用的2個距離中,您需要距離最短的名稱。是對的嗎? –

+0

是的,正確的。首先需要顯示最近的一個。 – Sparky

回答

2

你會想要申請MIN獲得每個名字的最小距離,GROUP BY名稱(它給出了每個名字的一個結果)和ORDER BY距離第一次和ID以後;

SELECT *, 
    MIN(6371 * Acos(Cos(Radians(9.939625)) * Cos(Radians(latitude)) * Cos(
           Radians(longitude) - Radians(76.259498)) + 
          Sin(Radians(9.939625)) * Sin(Radians(latitude)))) 
AS distance 
FROM deals 
WHERE end_date >= Now() 
GROUP BY name 
ORDER BY distance, id DESC 

我要補充,此查詢可能是確定了你的情況,但一般不是非常有用的,因爲如果你想知道,例如緯度和最近的比薩餅地方的經度,你需要一個完全不同的查詢。

0
SELECT *, 
    (6371 * Acos(Cos(Radians(9.939625)) * Cos(Radians(lat)) * Cos( 
           Radians(lng) - Radians(76.259498)) + 
          Sin(Radians(9.939625)) * Sin(Radians(lat)))) AS 
    distance 
FROM deals 
WHERE 1 
    AND end_date >= Now() 
GROUP BY name 
HAVING distance < 20000 
ORDER BY id DESC, 
     distance 
+0

對不起,這不起作用。 – Sparky