9

次のようなクエリを実行したい:

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))
4

4 に答える 4

1

2 つの列を持つテーブルを作成します。

B 1
A 2
D 3
E 4
C 5

次にJOIN LEFT(name, 1)、序数を取得します。次に、それで並べ替えます。

(申し訳ありませんが、Elixir/Ecto/Arity についてはサポートできません。)

于 2016-12-30T16:27:41.573 に答える