当前位置: 首页 > 面试题库 >

使用LIMIT / OFFSET在SQL中分页有时会导致在不同页面上重复

顾兴昌
2023-03-14
问题内容

我正在开发一个具有投票权的在线画廊,并且有一个单独的图片和投票表(对于每一次投票,我都会存储图片的ID和投票者的ID)。这些表的相关关系如下:PICTURE <--(1:n, using VOTE.picture_id)-- VOTE。我想查询图片表并按投票数对输出进行排序。这就是我要做的:

SELECT
    picture.votes_number,
    picture.creation_date,
    picture.author_id,
    picture.author_nickname,
    picture.id,
    picture.url,
    picture.name,
    picture.width,
    picture.height,
    coalesce(anon_1."totalVotes", 0)
FROM picture
LEFT OUTER JOIN
    (SELECT
        vote.picture_id as pid,
        count(*) AS "totalVotes"
     FROM vote
     WHERE vote.device_id = <this is the query parameter> GROUP BY pid) AS anon_1
ON picture.id = anon_1.pid
ORDER BY picture.votes_number DESC
LIMIT 10
OFFSET 0

当然,不同页面的偏移量也不同。

但是,有些具有相同ID的图片会显示在不同的页面上。我想原因是html" target="_blank">排序,但无法构造任何更好的查询,这将不允许重复。有人可以给我一个提示吗?

提前致谢!


问题答案:

您是否每页执行一次查询以显示?如果是,我怀疑数据库不能保证票数相同的物品的有效订单。因此,如果两个项目的投票数相同,则可能会返回第一个查询,而{ item 1, item 2 }第二个查询可能会返回{ item 2, item 1}。如果项目实际上是项目10和11,则同一项目可能会出现在第1页上,然后出现在第2页上。

我曾经有过这样的问题。如果这也是您的情况,请在订单上方添加一个额外的子句,以确保具有相同投票号的商品的订单顺序一致,例如:

ORDER BY picture.vote, picture.ID



 类似资料:
  • 问题内容: 我有一些限制数据以每页仅显示4个项目的代码。我使用的列大约有20到30个项目,因此我需要将这些项目分散在各个页面上。 在第一页上,我有: 您会在页面底部注意到我的定位标记,其中列出了第二个页面“ itempage2.php”。在项目页面2中,我具有相同的代码,除了我的select语句列出了偏移量4。 当我的数据库中有预定数量的项目时,这种方式可以运行。但这不是很好。仅当有更多项目时才需

  • 本文向大家介绍分页使用MySQL LIMIT,OFFSET吗?,包括了分页使用MySQL LIMIT,OFFSET吗?的使用技巧和注意事项,需要的朋友参考一下 首先,我们需要创建一个包含一些记录的表,然后在限制和偏移量的帮助下使用分页。 借助CREATE命令创建表。查询如下- 创建表后,我们将在INSERT命令的帮助下插入记录。 插入记录 插入记录后,我们可以借助SELECT命令检查表中有多少条记

  • 我正在考虑将我们传统的jpa/道解决方案迁移到Spring Data。 但是,我们的前端之一是SmartGWT,它们的数据库组件仅使用限制/偏移逐步加载数据,这使得难以使用Pagable。 这会导致问题,因为无法确定限制/偏移量最终是否可以转换为页码。(这可能因用户滚动方式、屏幕大小等而异)。 我查看了切片等,但无法找到在任何地方使用限制/偏移值的方法。 想知道有没有人有什么建议?最理想的情况是,

  • 1. 定义 慕课解释: Limit用于对查询结果集数量进行限制;Offset 则常与 Limit 搭配,意为偏移,表示跳过一定数量的记录。 2. 前言 本小节,我们将一起学习 SQL 中的Limit和 Offset。 在实际的开发中,我们可能常常会遇到以下场景: 获得分数的前 5 名。 分页获取数据。 这些场景需要细粒度地控制数据库数据,因此 SQL 引入了 Limit 和 Offset 来帮助开

  • 本文向大家介绍在MySQL中使用LIMIT进行分页的方法,包括了在MySQL中使用LIMIT进行分页的方法的使用技巧和注意事项,需要的朋友参考一下 今天看一个水友说他的MySQL现在变的很慢。问什么情况时。说单表超过2个G的一个MyISAM。真垃圾的回答方式。     简单答复:换一个强劲的服务器。换服务器很管用的:) ………        最终让取到慢查询:   如:             看

  • 本文向大家介绍MongoDB 使用Skip和limit分页,包括了MongoDB 使用Skip和limit分页的使用技巧和注意事项,需要的朋友参考一下 使用Skip和limit可以如下做数据分页: Code:   备注:可用于分页,limit是pageSize,skip是第n-1页*pageSize (n-1表示几  第1,2...页)      skip表示跳过  多少条数据,   聚合管道的优