2015-05-01 28 views
0

我想用SQLite.swift執行一個相當複雜的SQL語句,並最好在一個數組中獲得結果以用作tableview的數據源。聲明如下:如何執行復雜的sql語句並獲得數組中的結果?

SELECT defindex, AVG(price) FROM prices WHERE quality = 5 AND price_index != 0 GROUP BY defindex ORDER BY AVG(price) DESC 

我正在研究SQLite.swift文檔IND如何正確地做到這一點,但我無法找到一個方法。我可以在數據庫上調用prepare並遍歷Statement對象,但這並不是最佳的性能。

任何幫助,將不勝感激。

+0

,因爲我不知道你看到什麼樣的性能問題,我並沒有解決「性能」方面。 – stephencelis

+0

我不知道你可以將一個語句轉換成一個數組,所以我認爲你需要迭代來創建一個數組(因爲你的例子中有一個循環)。謝謝! – Longi

回答

7

在夫特大多數序列可通過簡單地包裹序列本身在陣列中被解壓縮到一個數組:

let stmt = db.prepare(
    "SELECT defindex, AVG(price) FROM prices " + 
    "WHERE quality = 5 AND price_index != 0 " + 
    "GROUP BY defindex " + 
    "ORDER BY AVG(price) DESC" 
) 
let rows = Array(stmt) 

構建數據源從本應是在這一點上相對簡單。

如果使用類型安全的API,它應該是這樣的:

let query = prices.select(defindex, average(price)) 
        .filter(quality == 5 && price_index != 0) 
        .group(defindex) 
        .order(average(price).desc) 
let rows = Array(query) 
+0

如果我有多個過濾器,例如大小和顏色,如果對於列顏色,我有以下選項(全部,藍色,黑色和黃色),並且在數據庫中,列顏色只有藍色黑色和黃色。 如何創建動態過濾器? – danielsalare

+0

@edse您可以創建並保留「基本」查詢的引用,並在其更改時應用適當的過濾器。我會發布示例代碼,但它不會在註釋中進行格式化。如果您仍然需要幫助,請隨時打開一個新問題。 – stephencelis