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
您可以将 case 构造添加到您的 select 子句。
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
简单地说“如果这些条件匹配,则包括该行”;它不是(也不能是)排序标准。