我有一个说明提醒的列表,我从Database
按createdAt
排序,limit = 10
和offsetSent
,最初为0,计算时间为:提取发生时,服务器返回一个参数lastOffset = offsetSent + lengthOfRecordsFound
。
现在问题是当我创建一个新记录,并通过发送ajax请求refresh
列表时,它返回我最后一条相同的记录,因为新记录被添加到顶部而offset
仍然是同样的。
有没有人有办法解决这个问题?
答案 0 :(得分:1)
我的猜测是createdAt
不是唯一的(为什么要这样?)。您需要提供完全确定的排序顺序,否则您使用的任何分页方法都将随机失败。
-- Latest
ORDER BY createdAt DESC, reminderId DESC
-- Oldest
ORDER BY createdAt, reminderId
答案 1 :(得分:0)
如果你可以摆动它,最好避免OFFSET
并使用这样的模式。
如果您首先获取最新信息,请将first_row值设置为非常大的数字。然后在您的查询中使用它。
SELECT id, whatever, whatever
FROM tbl
WHERE id < ?first_row?
ORDER BY id
LIMIT 10
然后,挂起你获取的最后一个ID。下次获取时,将其值用于first_row。
在实际操作中,您可以让每个SELECT操作再获取一行而不是您需要的LIMIT 11
,并且只需使用最后一行来获取其id值。然后使用WHERE id <= ?first_row?
代替下一个查询的偏移量。如果第11行永远不会出现在您的程序中,那么您就知道自己已经取得了所有内容。
答案 2 :(得分:0)
伙计我通过从服务器from
和to
发送值来解决我的问题,这些值基本上是我发送的记录的id
。我将它们保存在我的网络应用程序状态中。并查询表id < from || id > to
。 :)