目前我运行两个MySQL查询来处理我的分页...
查询1选择表中的所有行,这样我就知道需要列出多少页。
查询2选择当前页面的行(例如:第1页的行0到19(LIMIT 0,19),第2页的第20-39行等)。
似乎浪费了两个重复的查询,唯一的区别是LIMIT部分。
最好的办法是什么?
我应该在运行一个查询后使用PHP来过滤结果吗?
编辑:我应该运行一个查询并使用像array_slice()之类的内容来列出我想要的行吗?
答案 0 :(得分:2)
最好的&最快的方法是使用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
答案 1 :(得分:0)
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
。