【问题标题】:Problem with pagination from database question数据库问题的分页问题
【发布时间】:2020-05-16 02:32:45
【问题描述】:

我为足球预测页面使用了分页。每个用户可以有多个预测。 在 userdata 表中,用户信息以唯一 ID 存储。然后我有另一个名为 matchtips 的表,其中存储了预测并连接了用户 ID。在该表中,我还有一个名为tips_number 的行。例如,如果您有三个预测,则有 Tips_number 1 、 2 和 3 。 为了从数据库中获取数据,我使用了这个问题。

SELECT A.name, lastname, B . *
FROM userdata A
LEFT OUTER JOIN matchtips B ON ( A.id = B.user_id )
WHERE A.id IN (14,15,16,24,25,36,48,49,52,52)
AND B.league_id = '2020'
AND paid = '1'
GROUP BY A.id,tips_number,match_id
ORDER BY match_id, lastname, name, tips_number ASC

目前没有问题。但是,当一个用户有多个tips_number 并进入分页断点时,事情就会发生。分页应该一次显示 10 个用户。 ID 52 有三个预测(tips_numbers),两个应该显示在一个页面上,第三个作为下一页中十个新 ID 的开始。但是发生的情况是,两个页面都在每个页面上显示了所有三个预测。三个在第一页的末尾,三个与下一页的开头相同。我怎样才能避免这种情况?

【问题讨论】:

    标签: mysql pagination


    【解决方案1】:

    经过一番挣扎后,我终于做对了。我不得不使用子查询来做对。 $start$cols_per_page 来自分页类,之前用于在旧问题中获取 WHERE IN 中的 id。 所以这就是问题现在的样子。它就像一个魅力,还使用键分页而不是LIMIT and OFFSET 的分页。

    SELECT * FROM 
          (SELECT *, DENSE_RANK() OVER (ORDER BY surname, name, tips_number) offset_ FROM
            (SELECT A.id, name, surname, B.* 
             FROM userdata A, matchtips B 
             WHERE A.id = B.user_id
             AND B.league_id = '$lid'
             AND paid = '1'
            GROUP BY A.id, tips_number, match_id) result) result_offset
        WHERE offset_ > '$start' AND offset_ <= ('$start' + '$cols_per_page')
        ORDER BY result_offset. match_id, surname, name, tips_number ASC
    

    这篇文章让我朝着正确的方向前进。 Paging One-to-Many Results in SQL

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多