次のようなクエリを実行したい:
SELECT id, name
FROM mytable
ORDER BY FIELD(name, 'B', 'A', 'D', 'E', 'C')
FIELD
は MySQL 固有の関数であり'B', 'A', 'D', 'E', 'C'
、リストからの値です。
fragmentを使用してみましたが、ランタイムでのみ認識される動的アリティが許可されていないようです。
を使用して完全に未加工にする以外にEcto.Adapters.SQL.query
、Ecto のクエリ DSL を使用してこれを処理する方法はありますか?
編集:これは最初の素朴なアプローチですが、もちろん機能しません:
ids = [2, 1, 3] # this list is of course created dynamically and does not always have three items
query = MyModel
|> where([a], a.id in ^ids)
|> order_by(fragment("FIELD(id, ?)", ^ids))