mysql偏移量和限制给出了不明确的结果

lztngnrs  于 2021-06-24  发布在  Mysql
关注(0)|答案(3)|浏览(288)

我有一张我正在从网上取来的发言提醒单 Database 排序依据 createdAtlimit = 10 以及 offsetSent 它的初始值为0,计算方式是,当进行提取时,服务器返回一个param lastOffset = offsetSent + lengthOfRecordsFound . 现在的问题是当我创建一个新记录时 refresh 通过发送一个ajax请求,它将返回最后一条相同的记录,因为新记录被添加到顶部和底部 offset 还是一样。
有人有办法解决这个问题吗?

uqdfh47h

uqdfh47h1#

如果你能挥动它,最好避免 OFFSET 使用这样的模式。
如果要先获取最近的数据,请将第一行的值设置为非常大的数字。然后像这样在查询中使用它。

SELECT id, whatever, whatever
  FROM tbl
 WHERE id < ?first_row?
 ORDER BY id
 LIMIT 10

然后,抓紧你拿到的最后一个身份证。下次获取时,请将其值用于第一行。
在实际操作中,您可以让每个select操作多提取一行 LIMIT 11 ,并仅使用最后一行获取其id值。然后使用 WHERE id <= ?first_row? 代替下一个查询的偏移量。如果第11行从未出现在您的程序中,那么您就知道已经获取了所有内容。

vpfxa7rd

vpfxa7rd2#

我猜是这样的 createdAt 不是唯一的(为什么要?)。您需要提供完全确定的排序顺序,否则使用的任何分页方法都将随机失败。

-- Latest
ORDER BY createdAt DESC, reminderId DESC

-- Oldest
ORDER BY createdAt, reminderId
o75abkj4

o75abkj43#

伙计们,我通过从服务器发送值解决了我的问题, from 以及 to 基本上是 id 我正在发送的记录。我把它们保存在我的网络应用状态。并在表中查询 id < from || id > to . :)

相关问题