2013-02-22 219 views
0

我最近張貼了這個問題:getting distance between two points using google gps api with phpSQL查詢選擇一個*

和我收到這是但真棒我對人的反應一些問題和答覆,由於我的低/新狀態,這個網站我沒無法評論回來。在回答我的問題,其他用戶發佈的這個查詢 **

SELECT a.*, 3956 * 2 * ASIN(SQRT(POWER(SIN(($lat - lat) * pi()/180/2), 2) + COS($lat * pi()/180) * COS(lat * pi()/180) * 
POWER(SIN(($long - longi) * pi()/180/2), 2))) as distance 
FROM table 
GROUP BY id HAVING distance <= 500 
ORDER by distance ASC** 

我對這個查詢的一些問題,並希望有人能幫忙。

1.什麼是a。*?我不是超級先進的SQL,但很高效,從來沒有見過這樣的事情。我不知道它是否應該代表arbritrary字段或我的表中的實際字段

2.因爲我在php中執行此操作,查詢將引用引號,這將引起此查詢語法略有不同。我想知道是否有人知道查詢在引號中的樣子。

3.此查詢中還有「GROUP BY ID」。我的表中有一個id字段,我正在查詢。這個「id」與我的表中的id字段相關聯嗎?

任何幫助將是可怕的。

+1

這是一個很大的問題。 'a'沒有被指定爲任何地方的別名。 – Makoto 2013-02-22 04:09:55

+0

請分享你的表格描述,我很好奇你的SQL – Reinstar 2013-02-22 04:32:26

+0

你怎麼做'FROM table',table是sql中的關鍵字是不是? – 2013-02-22 05:06:33

回答

0

您的查詢應該是這樣的: - a是表別名。

SELECT a.*, 3956 * 2 * ASIN(SQRT(POWER(SIN(($lat - lat) * pi()/180/2), 2) + COS($lat * pi()/180) * COS(lat * pi()/180) * 
POWER(SIN(($long - longi) * pi()/180/2), 2))) as distance 
FROM table AS a 
GROUP BY id HAVING distance <= 500 
ORDER by distance ASC 

或者你可以使用簡單的

SELECT *, 3956 * 2 * ASIN(SQRT(POWER(SIN(($lat - lat) * pi()/180/2), 2) + COS($lat * pi()/180) * COS(lat * pi()/180) * 
POWER(SIN(($long - longi) * pi()/180/2), 2))) as distance 
FROM table 
GROUP BY id HAVING distance <= 500 
ORDER by distance ASC 
+0

謝謝Roopendra! – 2013-02-22 04:25:44

+0

所以在插入這個之後,爲了澄清一下,$ long和$ lat是我比較的變量,lat和longi是來自我表格右側的那些字段的值?在我的情況下,因爲我的領域是經度和緯度,lat和longi實際上成爲經度和緯度?也因爲我有一個名爲userID的id字段,該id將是我的userID字段? – 2013-02-22 04:33:33

+0

正確。 id替換爲userID和緯度和長度在這裏成爲經度和緯度。 – Roopendra 2013-02-22 04:38:11