首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有效使用分页和MySQL查询

问有效使用分页和MySQL查询
EN

Stack Overflow用户
提问于 2012-06-01 07:02:55
回答 2查看 1.8K关注 0票数 6

目前,我运行了两个MySQL查询来处理我的分页。

查询1从表中选择所有行,以便知道需要列出多少页。

查询2为当前页面选择行(例如:页1的行0到19行(限制0,19行),第二页的行20-39行等)。

这似乎是在浪费两个重复的查询,唯一的区别是限制部分。

有什么更好的方法来做这件事?

在运行了一个查询之后,我应该使用PHP来过滤结果吗?

编辑:应该运行一个查询并使用类似array_slice()之类的东西来只列出我想要的行吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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

票数 2
EN

Stack Overflow用户

发布于 2012-06-06 09:22:12

使用FOUND_ROWS()

SELECT语句可以包含限制子句,以限制服务器返回给客户端的行数。在某些情况下,最好知道语句将返回多少行,不受限制,但不再次运行语句。要获得此行计数,请在SELECT语句中包含一个SQL_CALC_FOUND_ROWS选项,然后调用FOUND_ROWS():

代码语言:javascript
复制
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name
    -> WHERE id > 100 LIMIT 10;
mysql> SELECT FOUND_ROWS();

第二个SELECT返回一个数字,该数字指示如果写入第一个SELECT不带限制子句,它将返回多少行。

请注意,这会给数据库带来额外的压力,因为每次都必须找出整个结果集的大小。只在需要时才使用SQL_CALC_FOUND_ROWS。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10845825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档