1

次のような IN クエリを使用してレコードを検索しています。

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

それはまったく可能ですか?

また、「イベント」部分が動的に生成されるため、テーブルに優先度列などを追加できないことにも注意する必要があります。

ここで非常によく似た質問を発見しました:

Rails Active Recordを使用したINリストのPostgres ORDER BY値

私のこれを重複としてマークしてください

4

2 に答える 2

2

これは Rails なので、Rails のメソッドを使用してデータベースのクエリを実行します。私は信じている:

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

あなたが探しているものです。

eventsがすでにデータベース レコードのコレクションである場合は、その.where(:id => events)ままでも機能します。

于 2013-01-09T10:32:57.310 に答える
0

order by は試しましたか?

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
于 2013-01-09T10:28:07.310 に答える