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

Nyx*_*nyx 43 php mysql pagination codeigniter

我正在使用Codeigniter进行分页功能,但我认为这一般适用于PHP/mySQL编码.

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

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

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

Dr.*_*lle 32

看一下SQL_CALC_FOUND_ROWS

  • 自MySQL 8.0.17起不推荐使用 (4认同)

Tam*_*mil 8

从 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();
Run Code Online (Sandbox Code Playgroud)

请改用这些查询:

SELECT * FROM tbl_name WHERE id > 100 LIMIT 10;
SELECT COUNT(*) WHERE id > 100;
Run Code Online (Sandbox Code Playgroud)

COUNT(*) 需要进行某些优化。SQL_CALC_FOUND_ROWS 会导致某些优化被禁用。


Aus*_*tin 6

SELECT COUNT(*) FROM table_name WHERE column = 'value' 将很快返回匹配该条件的表中的记录总数.

数据库SELECT操作通常"便宜"(资源方面),所以不要以合理的方式使用它们.

编辑:WHERE在OP提到他们需要该功能后添加.