3 回答
TA贡献1942条经验 获得超3个赞
不,这就是要分页的应用程序必须要做的事。它是可靠且防弹的,尽管它使查询两次。但是您可以将计数缓存几秒钟,这会很有帮助。
另一种方法是使用SQL_CALC_FOUND_ROWS子句,然后调用SELECT FOUND_ROWS()。除了必须FOUND_ROWS()随后进行调用之外,还有一个问题:MySQL中有一个bug,它会影响ORDER BY查询,使其在大表上比两个查询的幼稚方法慢得多。
TA贡献1825条经验 获得超6个赞
我几乎从来没有做过两次查询。
只需返回比需要多的一行,仅在页面上显示10,如果显示的行多,则显示“下一步”按钮。
SELECT x, y, z FROM `table` WHERE `some_condition` LIMIT 0, 11
// iterate through and display 10 rows.
// if there were 11 rows, display a "Next" button.
您的查询应以最相关的顺序返回。通常,大多数人都不会在意412中的第236页。
当您进行Google搜索时,结果不在第一页上,您可能会转到第二页,而不是第9页。
TA贡献1911条经验 获得超7个赞
避免重复查询的另一种方法是,首先使用LIMIT子句获取当前页面的所有行,然后,如果检索到最大行数,则仅执行第二个COUNT(*)查询。
在许多应用程序中,最可能的结果是所有结果都适合一页,并且必须进行分页是一种例外,而不是常规。在这种情况下,第一个查询将不会检索最大数量的结果。
例如,关于stackoverflow问题的答案很少会溅到第二页上。对答案的评论很少溢出到5个左右才能显示全部。
因此,在这些应用程序中,您只需简单地先使用LIMIT进行查询,然后只要没有达到该限制,就可以确切知道有多少行而无需执行第二个COUNT(*)查询-这应该涵盖大多数情况。
添加回答
举报