我正在做一个分页方法,我做的是:第一个查询将计算所有结果,第二个查询将使用LIMIT进行正常选择
技术上是否有任何方法可以做到这一点,但我只有一个查询?
我现在拥有的:
SELECT count(*) from table
SELECT * FROM table LIMIT 0,10
Run Code Online (Sandbox Code Playgroud)
sil*_*ire 12
没有人真正提到这一点,但使用该SQL_CALC_FOUND_ROWS技术的正确方法是这样的:
SELECT SQL_CALC_FOUND_ROWS * FROM `table` LIMIT 0, 10SELECT FOUND_ROWS().此查询的结果包含上一个查询的完整计数,即您好像没有使用该LIMIT子句.第二个查询立即快速,因为结果已经被缓存.您可以使用子查询来做到这一点:
select
*,
(select count(*) from mytable) as total
from mytable LIMIT 0,10
Run Code Online (Sandbox Code Playgroud)
但我不认为这有任何优势。
编辑:就像 Ilya 所说,总计数和行具有完全不同的含义,想要在同一查询中检索这些数据没有任何实际意义。我会坚持这两个问题。我给出这个答案只是为了表明这是可能的,而不是表明这是一个好主意。