我使用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"))
答案 0 :(得分:1)
您使用错误的方式,ORDER BY id in (:ids)
不正确
应该是
@Query("SELECT * FROM `group` WHERE id IN (:ids) ORDER BY id")
答案 1 :(得分:1)
所以你离得很近。尝试使用
@Query("SELECT * FROM `group` WHERE id IN (:ids) ORDER BY id")
这对你有用。我不确定group
答案 2 :(得分:0)
要按照您想要的顺序从数据库中检索数据是不可能的,因为数据库不知道数组中当前索引的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}")
}