我正在使用Room作为ORM。我想以特定的顺序从其中获取一些对象的数组。我的代码如下所示:
@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)的数组。输出数组将如下所示
ListOf(Group(id:16, name: "someName"),
Group(id: 12, name: "someAnotherName",
Group(id: 18, name: "name"),
Group(id: 3, name: "another"))
发布于 2018-06-15 16:47:27
所以你离我很近了。尝试使用
@Query("SELECT * FROM `group` WHERE id IN (:ids) ORDER BY id")
这对你来说应该是可行的。我不确定在group
上
发布于 2018-06-15 16:46:10
您使用错误的方式,ORDER BY id in (:ids)
是错误的
它应该是
@Query("SELECT * FROM `group` WHERE id IN (:ids) ORDER BY id")
发布于 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}") }
https://stackoverflow.com/questions/50871954
复制相似问题