2013-01-09 55 views
1

我正在尋找使用IN查詢記錄喜歡這樣:Rails的Postgres的訂單通過定製

Event.where("events.id IN (#{events.nil? ? '' : events.collect(&:id).join(',')})") 

將會產生類似的輸出:

SELECT "events".* FROM "events" WHERE (events.id IN (143,169,139,48,172,146,145,124,111,49,108,18,113,144)) AND (status = 'live') LIMIT 10 

然而,這隨後被update_at排序默認。我希望它通過查詢的IN部分排序。我的意思是,我希望這是它返回的訂單:

143,169,139,48,172,146,145,124,111,49,108,18,113,144 

這可能嗎?

我還必須注意,我不能在表中添加優先級列或類似的事件,因爲「events」部分將被動態生成。

我剛剛發現了一個非常類似的問題在這裏:

Postgres ORDER BY values in IN list using Rails Active Record

隨意紀念我這一個作爲複製

+0

此問題已在此處顯示:http://stackoverflow.com/questions/866465/sql-order-by-the-in-value-list – Jef

+0

使用'.order(「events.id asc」)'到底。 – MurifoX

+0

啊......我沒有看到這個評論。然後標記爲重複... – bonCodigo

回答

0

有你在試圖秩序?

SELECT "events".* FROM "events" 
WHERE (events.id IN (143,169,139,48,172,146,145,124,111,49,108,18,113,144)) 
AND (status = 'live') 
ORDER BY events.id asc 
LIMIT 10 
+0

不完全是我需要的,但是謝謝回答 – jay

2

這是Rails,所以使用Rails的數據庫查詢方法。我相信:

Event.where(:id => events.map(&:id)).order(:id) 

是你在找什麼。

如果events已經是數據庫記錄的集合,那麼只需要也可以。

+0

謝謝,我已經想到了類似的東西但如果可能的話,我寧願用AR來做。 – jay

+0

你是什麼意思?這是使用AR。 – Chowlett

+0

你是對的,對不起。我結束了使用http://stackoverflow.com/questions/12012574/postgres-order-by-values-in-in-list-using-rails-active-record – jay