2013-02-16 32 views
0

我嘗試使用我附近的位置列表(與最近的第一個排序)執行MySQL查詢。我不知道該怎麼做。我發現這個有趣的帖子:http://funkjedi.com/technology/308-search-using-geolocation-data-in-mysql/使用mysql的地理位置搜索查詢

一切接縫清楚。但查詢不起作用。我做了如下SQL查詢:

SELECT *, ($distance_formula) AS distance FROM restaurants 
    WHERE (geolatitude BETWEEN $lat_b1 AND $lat_b2) 
    AND (geolongitude BETWEEN $lng_b1 AND $lng_b2) 
    HAVING distance < $radius ORDER BY distance ASC 

我得到的錯誤是:

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column '$distance_formula' in 'field list' 

點,則$ distance_formula在腳本製作,而不是一個字段列表,這是對。但我應該怎麼做,MySQL知道這是執行,它不是一個領域?

如果您有任何其他幫助或其他解決方案(從綠色)我會很高興。最後,我需要一個cakephp的解決方案。

非常感謝

伊沃

+0

它看起來像'$ distance_formula'變量沒有評估,顯示爲「$ distance_formula」,而不是在您的查詢的SQL公式(6371 * ACOS ...)。你可以發佈你查詢數據庫的位嗎? – chrki 2013-02-16 14:09:33

+0

呵呵,我查詢我的數據庫是這樣的:return $ this-> query($ sql); 這就是它在cakephp中與其他查詢一起工作的方式。我認爲這個問題不像我查詢我的數據庫。 – FishWave 2013-02-16 15:21:38

+0

剛剛刪除distance_formula前的$符號並運行它 – Vineet1982 2013-02-16 15:26:47

回答

0

我認爲必須有窗口和文件的UNIX格式或一些時代的錯誤的例子具有一定的寫作問題,因此要求您更改命令點點寫命令爲:

$sql = "SELECT *, (" . $distance_formula . ") AS distance FROM listings WHERE (latitude BETWEEN " . $lat_b1 . " AND " . $lat_b2 . ") AND (longitude BETWEEN " . $lng_b1 . " AND . " $lng_b2 . ") HAVING distance < " . $radius . "ORDER BY distance ASC";