首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >不使用双重查询的MySQL分页?

不使用双重查询的MySQL分页?
EN

Stack Overflow用户
提问于 2009-05-04 02:05:15
回答 7查看 65.3K关注 0票数 121

我想知道是否有一种方法可以从MySQL查询中获得结果的数量,同时限制结果。

分页的工作方式(据我所知),首先我这样做

代码语言:javascript
复制
query = SELECT COUNT(*) FROM `table` WHERE `some_condition`

在获得查询(Num_rows)之后,我就得到了结果的数量。但为了实际限制我的结果,我必须执行第二个查询,如下所示:

代码语言:javascript
复制
query2 = SELECT COUNT(*) FROM `table` WHERE `some_condition` LIMIT 0, 10

我的问题是:有没有办法既检索给定结果的总数,又限制在单个查询中返回的结果?或者任何更有效的方式来做这件事。谢谢!

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-05-04 02:37:15

不,这是许多想要分页的应用程序必须做的事情。它是可靠和防弹的,尽管它进行了两次查询。但是您可以将计数缓存几秒钟,这将会有很大帮助。

另一种方法是使用SQL_CALC_FOUND_ROWS子句,然后调用SELECT FOUND_ROWS()。除了必须将FOUND_ROWS()调用放在后面的事实之外,这还有一个问题:a bug in MySQL,这会影响ORDER BY查询,使其在大型表上比两个查询的幼稚方法慢得多。

票数 71
EN

Stack Overflow用户

发布于 2010-07-24 19:14:51

我几乎从不做两个查询。

只需返回超过所需的一行,在页面上仅显示10行,如果超过所显示的行,则显示“下一步”按钮。

代码语言:javascript
复制
SELECT x, y, z FROM `table` WHERE `some_condition` LIMIT 0, 11
代码语言:javascript
复制
// iterate through and display 10 rows.

// if there were 11 rows, display a "Next" button.

您的查询应首先以最相关的顺序返回。很有可能,大多数人都不会关心翻到第236页的412页。

当你在谷歌上搜索,结果不在第一页时,你很可能会进入第二页,而不是第九页。

票数 73
EN

Stack Overflow用户

发布于 2011-09-08 13:19:16

另一种避免双重查询的方法是首先使用LIMIT子句获取当前页面的所有行,然后在检索到最大行数的情况下只执行第二次COUNT(*)查询。

在许多应用程序中,最有可能的结果是所有结果都可以放在一页上,并且必须进行分页是一个例外,而不是常态。在这些情况下,第一个查询将不会检索最大数量的结果。

例如,堆栈溢出问题的答案很少会出现在第二页上。对答案的评论很少会超过显示所有答案所需的5条左右的限制。

因此,在这些应用程序中,您只需先执行一个具有限制的查询,然后只要未达到该限制,您就可以确切地知道有多少行,而无需执行第二个COUNT(*)查询-这应该涵盖了大多数情况。

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

https://stackoverflow.com/questions/818567

复制
相关文章

相似问题

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