2016-08-23 25 views
-1

我正在嘗試使用某些數學基於sqlite數據庫中的距離進行查詢。結果的準確性並不重要,所以我有以下幾點:sql中的「AS」語法在python中拋出錯誤

SELECT * AS distance FROM items ORDER BY ((location_lat-lat)*(location_lat-lat)) + ((location_lng - lng)*(location_lng - lng)) ASC 

我嘗試這樣做:

location_lat, location_lng = (x,y) 

c.execute("SELECT * AS distance FROM items ORDER BY ((?-lat)*(?-lat)) + ((? - lng)*(? - lng)) ASC", (location_lat, location_lat, location_lng, location_lng,)) 

但是這最終給我一個錯誤:

sqlite3.OperationalError: near "AS": syntax error 

聲明不正確,還是抱怨參數化輸入??我做錯了什麼?

+4

*指的是表中的所有字段。嘗試使用「選擇列名作爲距離」 – blur0224

回答

0

因爲您的SQL語法錯誤。改用:

SELECT * FROM items ORDER BY ((location_lat-lat)*(location_lat-lat)) + ((location_lng - lng)*(location_lng - lng)) ASC 

說明:由於*回報你的桌子和AS內的所有列使用參考柱與結果集中顯示。你的SQL引擎不能多列映射到1

如果你想獲取剛一列,讓我們retailer_items作爲items那麼你可以使用查詢作爲:

SELECT retailers_items AS items FROM items ORDER BY ((location_lat-lat)*(location_lat-lat)) + ((location_lng - lng)*(location_lng - lng)) ASC 

或者,你可以使用AS找到min,max,count等列。例如:

SELECT count(items) FROM items ORDER BY ((location_lat-lat)*(location_lat-lat)) + ((location_lng - lng)*(location_lng - lng)) ASC