gpt4 book ai didi

php - 如何从 MySQL 数据库中选择分页明智的 N 条记录?

转载 作者:行者123 更新时间:2023-12-01 00:36:08 25 4
gpt4 key购买 nike

在我最近的一个基于 PHP (CodeIgniter) 的项目中,一个 MySQL 表包含近 30.000 条记录(并且还会增加更多)。如果我将这些记录显示为列表,性能会降低(MySQL 会很快检索所有这些记录,但运行 PHP 循环大约 30.000 次是不可行的)。所以我的计划是一次加载 100 条记录并创建一个分页,以便用户可以选择一个页码来加载指定数量的记录。

我可以使用以下查询轻松加载前 100 条记录:

SELECT * FROM <table_name> ORDER BY id ASC LIMIT 100

但问题是:当我选择 page=2, page=3, ...., page=n 时。我如何编写一个 MySQL 查询来加载第 2 条 100 条记录(对于 page=2)、第 3 条 100 条记录(对于 page=3)... ...第 n 100 条记录(对于 page=n)?

N.B: 请引用 101 号码记录可能没有 id 101,类似的 201 号码记录可能没有 201 id,所以请不要给我建议依赖于的查询主键

谁能帮我找出正确的查询?

  • 谢谢

最佳答案

前一百

 SELECT * FROM <table_name> ORDER BY id ASC LIMIT 0, 100

下一百个

 SELECT * FROM <table_name> ORDER BY id ASC LIMIT 100, 100

你在下单方面非常细心

极限声明解释:LIMIT 语句不是WHERE 子句。它不按 id 进行选择,实际上也不按任何标准进行选择(有 where 子句),而 limit 子句只是确保您是返回了 block 结果的一部分,这些结果是“everything”的子集。因此,为什么每次都提到 order by 很重要,这样每次后续调用都会按顺序为您提供正确的数据 block ,您可以 'next', 'next', '接下来通过他们

EG:对于无序表this_table:

+-------+-------------+
| id | value |
+-------+-------------+
| 1 | bob |
| 12 | fish |
| 112 | pink |
| 2 | cat |
| 8 | dog |
| 56 | blue |
| 88 | grey |
| 87 | red |
+-------+-------------+

选择返回如下:

SELECT * FROM <this_table> ORDER BY id ASC LIMIT 0,5
+-------+-------------+
| id | value |
+-------+-------------+
| 1 | bob |
| 2 | cat |
| 8 | dog |
| 12 | fish |
| 56 | blue |
+-------+-------------+

SELECT * FROM <this_table> ORDER BY id ASC LIMIT 5,5
+-------+-------------+
| id | value |
+-------+-------------+
| 87 | red |
| 88 | grey |
| 112 | pink |
+-------+-------------+

注意缺少第 9 行和第 10 行,这是故意的,表明 MySQL 按预期工作

顺便说一句,您还应该考虑在 id 上添加索引,这将大大提高这些选择的速度

ALTER TABLE <table_name> ADD INDEX `id` (`id`)

关于php - 如何从 MySQL 数据库中选择分页明智的 N 条记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49694330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com