2013-08-19 100 views
2

嘗試這個SQLite的查詢如何使用Sequel ORM以隨機順序從SQLite獲取記錄?

SELECT * FROM `terms` ORDER BY RANDOM() LIMIT 10 

有續集模型工作轉換。最近我:

Term.order(rand{}).limit(10) 
Term.order('random()').limit(10) 

其轉化爲

<Sequel::SQLite::Dataset: "SELECT * FROM `terms` ORDER BY 0.6160215951854449 LIMIT 10"> 
<Sequel::SQLite::Dataset: "SELECT * FROM `terms` ORDER BY 'random()' LIMIT 10"> 

但既不工程。有沒有辦法將SQLite或其他數據庫特定的函數傳遞給Sequel的order()

回答

7

使用Sequel.lit表達工作:

Term.order(Sequel.lit('RANDOM()')).limit(10) 
+0

你是非常接近與'Term.order(RAND {})上限(10)'。但是你需要通過一個塊,'Term.order {rand {}} .limit(10)'來傳遞它。在當前版本中,您可以使用'Term.order {rand.function} .limit(10)'。請參閱[virtual_rows.rdoc](https://github.com/jeremyevans/sequel/blob/4.36.0/doc/virtual_rows.rdoc#sqlfunctions---sql-function-calls)。 –

+0

@DwayneCrooks調用'Term.order {rand.function}'導致'Sequel :: DatabaseError:SQLite3 :: SQLException:沒有這樣的函數:rand'因爲'rand'不是SQLite函數,而是'Term.order {random。函數}'工作。感謝提示。 –

+0

謝謝你指出。我的錯。 –