インデックス付きキーとインデックスなしフィールドを持つテーブルがあります。特定の値を持つすべてのレコードを検索し、行を返す必要があります。複数の値で並べ替えることができるかどうかを知りたいです。
例:
id x_field
-- -----
123 a
124 a
125 a
126 b
127 f
128 b
129 a
130 x
131 x
132 b
133 p
134 p
135 i
pseudo: 結果を次のように並べたいのですが、where ORDER BY x_field = 'f', 'p', 'i', 'a'
SELECT *
FROM table
WHERE id NOT IN (126)
ORDER BY x_field 'f', 'p', 'i', 'a'
結果は次のようになります。
id x_field
-- -----
127 f
133 p
134 p
135 i
123 a
124 a
125 a
129 a
構文は有効ですが、クエリを実行すると、レコードを 1 つに制限しても結果が返されません。別の方法はありますか?
x_field をテスト結果と考え、条件に該当するすべてのレコードを検証する必要があります。テスト結果を失敗した値、成功した値で並べ替えたいと考えました。そのため、最初に失敗した値を検証し、次に ORDER BY を使用して成功した値を検証できます。
できないこと:
- GROUP BY、特定のレコードの値を返す必要があるため
- WHERE x_field IN('f', 'p', 'i', 'a')、複数の検証テストに1つのクエリを使用しようとしているため、すべての値が必要です。また、x_fieldの値はDESC/ASC順ではありません。
この質問を書いた後、私はこれを再考する必要があると思い始めています、笑!
ベストアンサー1
...
WHERE
x_field IN ('f', 'p', 'i', 'a') ...
ORDER BY
CASE x_field
WHEN 'f' THEN 1
WHEN 'p' THEN 2
WHEN 'i' THEN 3
WHEN 'a' THEN 4
ELSE 5 -- fallback for values not inside the IN clause. eg : x_field = 'b'
END, id