目前我运行两个 MySQL 查询来处理我的分页...
查询 1 从表中选择所有行,因此我知道需要列出多少页。
查询 2 选择当前页面的行(例如:第 1 页的第 0 到 19 行(LIMIT 0, 19),第 2 页的第 20-39 行等)。
这似乎浪费了两个重复查询,唯一的区别是 LIMIT 部分。
有什么更好的方法来做到这一点?
我应该在运行一个查询后使用 PHP 过滤结果吗?
编辑:我应该运行一个查询并使用类似 array_slice() 的东西来只列出我想要的行吗?
目前我运行两个 MySQL 查询来处理我的分页...
查询 1 从表中选择所有行,因此我知道需要列出多少页。
查询 2 选择当前页面的行(例如:第 1 页的第 0 到 19 行(LIMIT 0, 19),第 2 页的第 20-39 行等)。
这似乎浪费了两个重复查询,唯一的区别是 LIMIT 部分。
有什么更好的方法来做到这一点?
我应该在运行一个查询后使用 PHP 过滤结果吗?
编辑:我应该运行一个查询并使用类似 array_slice() 的东西来只列出我想要的行吗?
最好和最快的方法是使用 2 个 MYSQL 查询进行分页(正如您已经在使用的那样),为了避免过度头痛,您必须通过仅选择一列(比如主键)来简化用于找出总行数的查询够了。
SELECT * FROM sampletable WHERE condition1>1 AND condition2>2
对于这样的查询分页,您可以使用这两个查询
SELECT * FROM sampletable WHERE condition1>1 AND condition2>2 LIMIT 0,20
SELECT id FROM sampletable WHERE condition1>1 AND condition2>2
一个 SELECT 语句可能包含一个 LIMIT 子句来限制服务器返回给客户端的行数。在某些情况下,希望知道在没有 LIMIT 的情况下该语句将返回多少行,但无需再次运行该语句。要获取此行数,请在 SELECT 语句中包含 SQL_CALC_FOUND_ROWS 选项,然后调用 FOUND_ROWS():
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name
-> WHERE id > 100 LIMIT 10;
mysql> SELECT FOUND_ROWS();
第二个 SELECT 返回一个数字,表示如果没有 LIMIT 子句,第一个 SELECT 将返回多少行。
请注意,这会给数据库带来额外的压力,因为它每次都必须找出完整结果集的大小。SQL_CALC_FOUND_ROWS
仅在需要时使用。