谢谢佬友支持。可以三连+关注后续还有各种文章。
感谢大佬教程,
1 个赞
谢谢佬友支持,今后还有更多的文章,可以关注我在 L 站的账号方便收到文章推送。
按照score排序之后 按照Id偏移。不过 seek method是否支持呢?
1 个赞
是的,大致的思路就是这样。当然是支持的。其实解决起来很容易,我先卖个关子等等再发,给其他佬友点机会哈。
还有同学参与竞猜吗~
SELECT first_name, last_name, score, id
FROM players
WHERE game_id = 42
AND (score < 983 OR (score = 983 AND id < last_id))
ORDER BY score DESC, id DESC
LIMIT 5;
2 个赞
关注你的账号,第一时间收到文章推送
1 个赞
?google 有 start 参数可以指定。还有可以在搜索结果直接点击第10页,你如何应对。
已被佬友发现了
1 个赞
这问题不是很容易处理,就用 Seek,都不用搭配 Offset就能单独实现。有兴趣可以关注这个话题,等其他佬友大家一起讨论,如果没有讨论结果后续我再公布答案。
哈哈哈,是的~谢谢佬友支持。
这一楼的同学已经提前公布了类似的答案了。正确答案就是就是按照某个唯一属性做偏移,把这个属性和 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();
2 个赞
写的很清晰,思考逻辑是递进的,很棒
1 个赞
谢谢佬友支持的支持。
1 个赞
还有佬友发表答案吗,没有的话后续准备公布答案啦。
1 个赞
一直用的MySql数据库,我就以MySql为数据库来回答了。
这种方式实际上就是ID限定查询法,一般都是用id作为限定条件。如果限定的条件不是唯一的,会存在排序不稳定的情况;同时若限定条件不是查询条件的索引包含字段,会导致回表或者是选错索引,在用id作为限定条件时,极大概率会导致选错索引,用主键索引,所以一般会加上强制索引,如果是非id作为限定条件,最好是将其包含在条件命中的索引中
1 个赞
佬友的回答非常的专业。
再补充一个问题,即上面佬友提到的,谷歌的 1-10 是可以点击的。这个 1-10 任何一页,如何实现呢。
还有同学参与讨论吗。