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

您可以将 case 构造添加到您的 select 子句。

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 回答