我的sqlite表需要一个简单的滚动功能,返回上一次选择的X记录或下一个X记录。正如规则#2 "Do not try to implement a scrolling window using LIMIT and OFFSET"所述,我从
更改为sqlSELECT * FROM tracks WHERE xxx LIMIT 5 OFFSET :index
到
SELECT * FROM tracks WHERE xxx and rowid > :index LIMIT 5
我做了一些简单的测试,结果似乎相同,例如。 从其中rowid>的曲目中选择rowid 100限制5 和从曲目限制5偏移100 中选择rowid都会在rowid 100之后返回相同的5条记录。
所以我的问题是< 1> OFFSET中指定的值与rowid相同(假设我没有删除记录)? &LT 2 - ;我的改变更好了吗?
更新,我知道删除记录时,rowid可能会发生变化。所以我的问题是假设我没有删除记录,OFFSET中使用的值是否与rowid相同?如果不是,这个值究竟意味着什么?如果我删除了一些记录,那么这个值究竟意味着什么呢?
另外,那篇文章说“这个信息已经过时了”但我找不到更新的信息!
答案 0 :(得分:1)
删除某些行后,rowid
号码不再与索引相同。
要显示下一页的行,您不应使用index
值,而应使用从最后一页排序的列的最后一个值。