使用相同的查询获取mysql的限制总数?

TDS*_*Sii 7 mysql limit

我正在做一个分页方法,我做的是:第一个查询将计算所有结果,第二个查询将使用LIMIT进行正常选择

技术上是否有任何方法可以做到这一点,但我只有一个查询?

我现在拥有的:

SELECT count(*) from table
SELECT * FROM table LIMIT 0,10
Run Code Online (Sandbox Code Playgroud)

sil*_*ire 12

没有人真正提到这一点,但使用该SQL_CALC_FOUND_ROWS技术的正确方法是这样的:

  1. 执行查询: SELECT SQL_CALC_FOUND_ROWS * FROM `table` LIMIT 0, 10
  2. 然后直接运行此查询:SELECT FOUND_ROWS().此查询的结果包含上一个查询的完整计数,即您好像没有使用该LIMIT子句.第二个查询立即快速,因为结果已经被缓存.


krt*_*tek 3

您可以使用子查询来做到这一点:

select 
    *,
    (select count(*) from mytable) as total
from mytable LIMIT 0,10
Run Code Online (Sandbox Code Playgroud)

但我不认为这有任何优势。

编辑:就像 Ilya 所说,总计数和行具有完全不同的含义,想要在同一查询中检索这些数据没有任何实际意义。我会坚持这两个问题。我给出这个答案只是为了表明这是可能的,而不是表明这是一个好主意。

  • @Krtek你不是在那里做1个查询,而是2个。子查询或普通查询在这里是同一件事。那么为什么不只做 2 个查询来让它变得更好呢。1 个衬垫的要求在这里没有任何意义:P。不过你仍然有唯一的解决方案:-P (2认同)
  • @Michael我们可以对什么是1个查询很挑剔,从连接的角度来看,这只需要与数据库服务器的一个连接。从数据库的角度来看,子查询肯定是一个查询。 (2认同)