目前,我运行了两个MySQL查询来处理我的分页。
查询1从表中选择所有行,以便知道需要列出多少页。
查询2为当前页面选择行(例如:页1的行0到19行(限制0,19行),第二页的行20-39行等)。
这似乎是在浪费两个重复的查询,唯一的区别是限制部分。
有什么更好的方法来做这件事?
在运行了一个查询之后,我应该使用PHP来过滤结果吗?
编辑:应该运行一个查询并使用类似array_slice()之类的东西来只列出我想要的行吗?
发布于 2012-06-07 04:42:38
最好和最快的方法是使用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
发布于 2012-06-06 09:22:12
SELECT语句可以包含限制子句,以限制服务器返回给客户端的行数。在某些情况下,最好知道语句将返回多少行,不受限制,但不再次运行语句。要获得此行计数,请在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返回一个数字,该数字指示如果写入第一个SELECT不带限制子句,它将返回多少行。
请注意,这会给数据库带来额外的压力,因为每次都必须找出整个结果集的大小。只在需要时才使用SQL_CALC_FOUND_ROWS。
https://stackoverflow.com/questions/10845825
复制相似问题