斯卡拉光滑。错误的分页 \w Postgres
Scala Slick. Wrong pagination \w Postgres
我正在尝试使用 Slick 和 Postgres 进行简单的分页,但它没有
按预期工作。
// Table
// "users_pkey" PRIMARY KEY, btree (id)
// "users_id_idx" btree (id)
val id: Column[Option[Long]] = column("id", O.PrimaryKey, O.AutoInc, O.DBType(BigSerial))
// Pagination queries
users.drop(0).take(20).sortBy(_.id.desc).list
users.drop(20).take(20).sortBy(_.id.desc).list
但是结果没有按预期排序。在内页按 id
排序的用户,例如第一页将是 40, 35, 34 ... 4, 2
,第二页将是 39, 38, 36, ... 3, 1
.
问题是您在排序后取您的值。如果在初始顺序中,39
位于第 21 个位置,并且您对前 20 个值进行排序,则无法将其排序到正确的位置,因为您在没有它的情况下进行排序。
如果你想要正确的顺序,你应该在 之前 对你的用户进行排序,例如:
val sortedUsers = users.sortBy(_.id.desc)
sortedUsers.drop(0).take(20).list
sortedUsers.drop(20).take(20).list
我正在尝试使用 Slick 和 Postgres 进行简单的分页,但它没有 按预期工作。
// Table
// "users_pkey" PRIMARY KEY, btree (id)
// "users_id_idx" btree (id)
val id: Column[Option[Long]] = column("id", O.PrimaryKey, O.AutoInc, O.DBType(BigSerial))
// Pagination queries
users.drop(0).take(20).sortBy(_.id.desc).list
users.drop(20).take(20).sortBy(_.id.desc).list
但是结果没有按预期排序。在内页按 id
排序的用户,例如第一页将是 40, 35, 34 ... 4, 2
,第二页将是 39, 38, 36, ... 3, 1
.
问题是您在排序后取您的值。如果在初始顺序中,39
位于第 21 个位置,并且您对前 20 个值进行排序,则无法将其排序到正确的位置,因为您在没有它的情况下进行排序。
如果你想要正确的顺序,你应该在 之前 对你的用户进行排序,例如:
val sortedUsers = users.sortBy(_.id.desc)
sortedUsers.drop(0).take(20).list
sortedUsers.drop(20).take(20).list