SELECT * FROM tblItems
WHERE itemId IN (9,1,4)
SQLがそれらを見つけた順序で返します(たまたま1、4、9です)が、配列で指定した順序でそれらを返したいです。
母国語 (obj c) で後で並べ替えることができることはわかっていますが、SQL でこれを行うためのきちんとした方法はありますか?
このようなものは素晴らしいでしょう:
ORDER BY itemId (9,1,4) -- <-- this dosn't work :)
おそらくこれを行うための最良の方法は、ランク順も含むアイテムIDのテーブルを作成することです。次に、ランク順に参加して並べ替えることができます。
次のようなテーブルを作成します。
itemID rank
9 1
1 2
4 3
次に、クエリは次のようになります。
select tblItems.* from tblItems
inner join items_to_get on
items_to_get.itemID = tblItems.itemID
order by rank
CASE式を使用して、ID値を増加するシーケンスにマップします。
... ORDER BY CASE itemId
WHEN 9 THEN 1
WHEN 1 THEN 2
ELSE 3
END
私はmysql環境で一度同じタスクを実行しました。
私は使用することになった
ORDER BY FIND_IN_SET(itemID, '9,1,4')
それ以来、これは私のために働いています。sqliteでも機能することを願っています
select 句に case 構文を追加できます。
select case when itemid = 9 then 1
when itemid = 1 then 2 else 3 end sortfield
etc
order by sortfield
SQL でデータを並べ替える手順を作成することもできますが、それはネイティブ言語の手順よりもはるかに複雑になります。
SQL でそのようなデータを並べ替える「適切な方法」はありません。a のWHERE
句はSELECT
単に「これらの条件が一致する場合は行を含める」と言っています。それは順序付けの基準ではありません (そしてそうではありません)。