使用offset + limit查找mySQL查询中的结果总数

我正在使用Codeigniter执行分页功能,但我认为这通常适用于PHP / mySQL编码。

我正在使用offset和limit检索目录列表,具体取决于每页要多少结果。但是要知道所需的总页数,我需要知道(结果总数)/(限制)。现在,我正在考虑第二次运行SQL查询,然后计算所需的行数,但不使用LIMIT。但是我认为这似乎是在浪费计算资源。

有没有更好的方法?谢谢!

编辑:我的SQL查询也使用WHERE来选择具有特定'category_id'的所有行


慕无忌1623718
浏览 1291回答 3
3回答

素胚勾勒不出你

从MySQL 8.0.17开始,SQL_CALC_FOUND_ROWS查询修饰符和随附的FOUND_ROWS()函数已弃用,并将在以后的MySQL版本中删除。作为替代,考虑使用LIMIT执行查询,然后再使用COUNT(*)且不使用LIMIT执行第二个查询,以确定是否还有其他行。例如,代替这些查询:SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE id > 100 LIMIT 10;SELECT FOUND_ROWS();请改用以下查询:SELECT * FROM tbl_name WHERE id > 100 LIMIT 10;SELECT COUNT(*) WHERE id > 100;COUNT(*)受到某些优化。SQL_CALC_FOUND_ROWS导致一些优化被禁用。

交互式爱情

考虑到SQL_CALC_FOUND_ROWS需要调用FOUND_ROWS()之后,如果你想获取总数有,而不必调用第二从限制返回的结果SELECT,我会使用JOIN源于一个结果子查询:SELECT * FROM `table` JOIN (SELECT COUNT(*) FROM `table` WHERE `category_id` = 9) t2 WHERE `category_id` = 9 LIMIT 50注意:每个派生表必须具有自己的别名,因此请确保命名连接表。在我的示例中,我使用t2。
打开App,查看更多内容
随时随地看视频慕课网APP