繁体   English   中英

在Query中按顺序排序

[英]Sort by order in Query

我使用Room作为ORM。 我希望通过特定的顺序从中获取一些对象的数组。 我的代码看起来像这样:

@Query("SELECT * FROM `group` WHERE id IN (:ids) ORDER BY id in (:ids)")

但“顺序”不起作用。 我不想只按字段“id”对其进行排序。 我想通过与数组“ids”相关的id对其进行排序。 我的意思是:

我有整数ids = arrayOf(16,12,18,3)数组,我在上面的查询中使用它。 在输出上我想要一些对象的数组(比如组)。 输出数组将如下所示

    ListOf(Group(id:16, name: "someName"),
           Group(id: 12, name: "someAnotherName",
           Group(id: 18, name: "name"), 
           Group(id: 3, name: "another"))

所以你离这里很近。 尝试使用

@Query("SELECT * FROM `group` WHERE id IN (:ids) ORDER BY id")

这对你有用。 我不确定该group

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

它应该是

@Query("SELECT * FROM `group` WHERE id IN (:ids) ORDER BY id")

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

你真正想要的是通过一些id得到相应的组信息,所以

  • 无需订购即可检索组数据

     @Query("SELECT * FROM group WHERE id IN (:ids)") fun getGroupsById(): List<Group>` 
  • 将结果存储到map

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

     for (id in ids) { // here group is related to each position in the array group = idToGroups[id] println("Id: ${id}, Name: ${group.name}") } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM