[英]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.