mysql选择一个条目,然后选择接下来的n个条目

mysql选择一个条目,然后选择接下来的n个条目,mysql,pagination,Mysql,Pagination,我有一个网页,用户可以从MySQL数据库中选择一个条目。显示此条目后,我希望有一个按钮允许用户选择下五个DB条目和另一个按钮允许用户选择前五个条目 如何编写这两个按钮的查询 我有一个主键列,\u id和一个日期列date,但两者都有差距,即从表中选择所有数据会导致: +-----+------------+ | _id | date | +-----+------------+ | 4 | 2020-11-26 | | 5 | 2020-11-28 | | 6 | 2

我有一个网页,用户可以从MySQL数据库中选择一个条目。显示此条目后,我希望有一个按钮允许用户选择下五个DB条目和另一个按钮允许用户选择前五个条目

如何编写这两个按钮的查询

我有一个主键列,
\u id
和一个日期列
date
,但两者都有差距,即从表中选择所有数据会导致:

+-----+------------+
| _id | date       |
+-----+------------+ 
|   4 | 2020-11-26 | 
|   5 | 2020-11-28 |
|   6 | 2020-11-29 | 
|   7 | 2020-12-01 | 
|   8 | 2020-12-08 | 
|  10 | 2020-12-22 | 
|  12 | 2020-12-25 |
+-----+------------+
对于第一个按钮(接下来的五个条目),我尝试了:

从Blog中选择*,其中post=1且_id=5按日期顺序描述限制5偏移量5

返回0条记录,并且

从Blog中选择*,其中post=1且_id>=5订单截止日期描述限制5偏移量5

它还返回0条记录

我不知道如何编写第二个按钮的查询,即前五个条目


任何帮助都将不胜感激。

关于使用
限制
偏移量
的更详细说明(因为注释“无效”):

假设您有一个“很多结果”的查询,比如:
selecti FROM integers,并且您确实希望将其分页为包含5条记录的页面

执行时:
从整数限制5偏移量0中选择i将给出前5行。第一个原因是读取从偏移量0开始

mysql> SELECT i FROM integers ORDER BY i LIMIT 5 OFFSET 0;
+---+
| i |
+---+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
+---+
5 rows in set (0.00 sec)
接下来的5条记录可以通过执行
SELECT i FROM integers LIMIT 5 OFFSET 5获得

或者,换句话说,偏移后的值应为
(pagenummer-1)*5
。pagenumber=1是第一页

获取第42页的示例((42-1)*5=205):

但是,解释显示了一些有趣的东西:

mysql> explain SELECT i FROM integers ORDER BY i LIMIT 5 OFFSET 205\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: integers
   partitions: NULL
         type: index
possible_keys: NULL
          key: PRIMARY
      key_len: 4
          ref: NULL
         rows: 210
     filtered: 100.00
        Extra: Using index
1 row in set, 1 warning (0.00 sec)

中间会话的事情是需要读取210行以生成这5行结果。

仅更改
limit。。偏移量..
limit 5 offset 0
将给出前5条记录,
limit 5 offset 5
将给出下5条记录,
limit 5 offset 10
将给出下5条记录。数据集有多大?如果数据集很大,你可以在这里解释一下:你使用的是什么应用程序代码?@草莓非常小——它现在是一个只有11个或更多实体的博客,但我计划每周写一次博客,所以它会随着时间的推移而增长。对不起,正如我在数据集中显示的那样,我的
\u id
日期
不是连续的——存在差距,与你的整数示例不同——我不知道这是否是你的答案对我不起作用的原因,但当我选择“id,博客日期”,其中“id=5限制5偏移量5”
时,我得到的是
空集(0.00秒)
,你必须使用(或创建)一个查询来获取所有博客条目,比如
选择“id,博客日期”
,并将
limit 5 offset 5
添加到此查询以获得结果的第二页。
mysql> explain SELECT i FROM integers ORDER BY i LIMIT 5 OFFSET 205\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: integers
   partitions: NULL
         type: index
possible_keys: NULL
          key: PRIMARY
      key_len: 4
          ref: NULL
         rows: 210
     filtered: 100.00
        Extra: Using index
1 row in set, 1 warning (0.00 sec)