假设我使用where子句
查询数据库WHERE _id IN (5,6,424,2)
是否有任何方法可以按照_id列表中列出的顺序对返回的游标进行排序? _id属性从第一个到最后一个在Cursor中为5,6,424,2?
这恰好是通过ContentProvider在Android上进行的,但这可能不相关。
答案 0 :(得分:3)
使用子查询选择ID列表并加入其中:
select t1.*
from t1
inner join
(
select 1 as id, 1 as num
union all select 5, 2
union all select 3, 3
) ids on t1.id = ids.id
order by ids.num
UPD:代码已修复
答案 1 :(得分:1)
一种方法可能是在每个之间使用UNION执行单独的SQL查询。您显然会按照希望返回给您的顺序发出每个查询。
答案 2 :(得分:1)
...
按订单
当_id = 5然后1
的情况
当_id = 6然后2
端
等
答案 3 :(得分:1)
您可以将其加入包含排序顺序所需列表的虚拟表
select tbl.*
from tbl
inner join (
select 1 as sorter, 5 as value union all
select 2, 6 union all
select 3, 424 union all
select 4, 2) X on tbl._id = X.value
ORDER BY X.sorter
答案 4 :(得分:1)
列表?你没有名单! ;)
此:
WHERE _id IN (5,6,424,2)
仅仅是语法糖:
WHERE (
_id = 5
OR _id = 6
OR _id = 424
OR _id = 2
)
SQL只有一个数据结构,即表。你的(5,6,424,2)
也不是一张桌子! :)
您可以创建一个值表,但您的下一个问题是表没有任何逻辑顺序。因此,根据@ cyberkiwi的回答,您必须明确创建一个列来为排序顺序建模。并且为了使其对调用应用程序明确,请确保在查询的SELECT
子句中公开此列。