《你不知道的 JAVA 系列博客》🔥 送给 OFFSET & LIMIT 的告别气球。

还有佬友参与吗,没有的话明日公布和整理各位佬友的答案~

1 个赞

今日准备公布答案,今日还有同学一起讨论方案吗

感谢分享

1 个赞

谢谢佬友的支持。

感谢分享!

1 个赞

谢谢佬友支持。

佬友可以关注我的 L 站账号,后续有新的文章发表可以收到推送~

佬友喜欢的话可以关注我在 L 站的账号,后续还有各种文章待发出~

佬友的回答非常专业。这里要准确表述的话,其实引起的问题是这样:

如果出现了分数相同的记录,如果还是采用这种模式来查询,会导致的问题准确来说,是当某个数据为当前页的最后一条记录时,如果这条数据的后一条是同样的分数的话,这条数据会被遗漏掉。

要避免这个问题其实就是加一个唯一键作为索引,然后和 score 作为联合索引进行查询就可以了。


SELECT player_id, first_name, last_name, score
FROM players
WHERE game_id = 42
AND (score, player_id) < (983, 15)
ORDER BY score DESC, player_id DESC
LIMIT 5;

写成 Seek 就是这样:

DSL.using(configuration)
   .select(PLAYERS.PLAYER_ID,
           PLAYERS.FIRST_NAME,
           PLAYERS.LAST_NAME,
           PLAYERS.SCORE)
   .from(PLAYERS)
   .where(PLAYERS.GAME_ID.eq(42))
   .orderBy(PLAYERS.SCORE.desc(),
            PLAYERS.PLAYER_ID.desc())
   .seek(983, 15) // (!)
   .limit(5)
   .fetch();

感谢佬友的互动与支持。

还有老友一起参加讨论吗~

最后一波讨论的机会了佬友们。

今晚公布和整理答案佬友们。

太强了佬 :tieba_087:

1 个赞

谢谢佬友的支持~
后续还有大量文章可以关注账号呢。

感谢分享,大佬厉害啊

1 个赞

感谢佬友支持,可以关注账号,后面可以收到新文章的推送。

还有佬友参与发表看法吗~

本周最后一天工作日,还有佬友参与讨论吗? :grinning:

感谢分享 跟着大佬学习

1 个赞

谢谢佬友的支持,阔以关注我的账号呢。方便收到文章推送。