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

5 に答える 5

6

おそらくこれを行うための最良の方法は、ランク順も含むアイテム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
于 2013-03-01T10:54:13.827 に答える
3

CASE式を使用して、ID値を増加するシーケンスにマップします。

... ORDER BY CASE itemId
             WHEN 9 THEN 1
             WHEN 1 THEN 2
             ELSE        3
             END
于 2013-03-01T11:02:28.283 に答える
1

私はmysql環境で一度同じタスクを実行しました。

私は使用することになった

ORDER BY FIND_IN_SET(itemID, '9,1,4')

それ以来、これは私のために働いています。sqliteでも機能することを願っています

于 2013-03-01T10:54:18.267 に答える
0

select 句に case 構文を追加できます。

select case when itemid = 9 then 1
when itemid = 1 then 2 else 3 end sortfield
etc
order by sortfield
于 2013-03-01T10:53:47.953 に答える
0

SQL でデータを並べ替える手順を作成することもできますが、それはネイティブ言語の手順よりもはるかに複雑になります。

SQL でそのようなデータを並べ替える「適切な方法」はありません。a のWHERE句はSELECT単に「これらの条件が一致する場合は行を含める」と言っています。それは順序付けの基準ではありません (そしてそうではありません)。

于 2013-03-01T10:53:54.703 に答える