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