首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在查询中按顺序排序

在查询中按顺序排序
EN

Stack Overflow用户
提问于 2018-06-15 16:41:07
回答 3查看 2K关注 0票数 3

我正在使用Room作为ORM。我想以特定的顺序从其中获取一些对象的数组。我的代码如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
@Query("SELECT * FROM `group` WHERE id IN (:ids) ORDER BY id in (:ids)")

但是"order by“是行不通的。我不想只按字段"id“对其进行排序。我想按与数组“id”相关的id对其进行排序。我的意思是:

我有一个整数ids = arrayOf(16,12,18,3)数组,我在上面的查询中使用了它。在输出中,我希望得到某个对象(比如group)的数组。输出数组将如下所示

代码语言:javascript
代码运行次数:0
运行
复制
    ListOf(Group(id:16, name: "someName"),
           Group(id: 12, name: "someAnotherName",
           Group(id: 18, name: "name"), 
           Group(id: 3, name: "another"))
EN

回答 3

Stack Overflow用户

发布于 2018-06-15 16:47:27

所以你离我很近了。尝试使用

代码语言:javascript
代码运行次数:0
运行
复制
@Query("SELECT * FROM `group` WHERE id IN (:ids) ORDER BY id")

这对你来说应该是可行的。我不确定在group

票数 2
EN

Stack Overflow用户

发布于 2018-06-15 16:46:10

您使用错误的方式,ORDER BY id in (:ids)是错误的

它应该是

代码语言:javascript
代码运行次数:0
运行
复制
@Query("SELECT * FROM `group` WHERE id IN (:ids) ORDER BY id")
票数 1
EN

Stack Overflow用户

发布于 2018-06-15 18:49:14

按照您想要的顺序从数据库中检索数据是不可能的,因为数据库不知道is数组中的当前索引。实际上,这是可能的,但您必须在查询中提供此信息,或者事先将其存储在表中。

您真正想要的,是通过一些ids获取对应的群组信息,所以

  • 无需排序即可检索组数据

@Query("SELECT * FROM group WHERE id IN (:ids)") fun getGroupsById():List``

  • 将结果存储到map

val idToGroups = mapOf() for (group in getGroupsById()) { idToGroupsgroup.id = group }组然后在迭代初始ids数组时,按id获取相应的组

for (id in ids) { //此处group与数组中的每个位置相关group = idToGroupsid println("Id:${id},Name:${group.name}") }

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50871954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档