我在表中搜索记录如下:
SELECT Id, Name FROM my_table WHERE Name LIKE '%prashant%' LIMIT 0, 10;
现在,我正在添加LIMIT来维护我的分页.但是当用户搜索单词'prashant'时,我的总记录为'prashant'为124.但是,由于限制应用于查询,因此它只在我的PHP脚本中获取10条记录,当我在PHP代码中计算mysql变量时,它返回的总记录数为10.
所以基本上我想使用单个查询来计算和限制,通过在上面的查询中进行一些修改,我想要记录的总数(124).我不想运行单独的count(*)查询来计算查询找到的总结果.
谢谢.
Ion*_*tan 18
SELECT SQL_CALC_FOUND_ROWS
  Id, Name
FROM my_table
WHERE
  Name LIKE '%prashant%'
LIMIT 0, 10;
# Find total rows
SELECT FOUND_ROWS();
Emi*_*l H 10
MySQL支持使用SQL_CALC_FOUND_ROWSIonut提到的这样做.然而,事实证明,在许多情况下,使用两种语句以旧式方式执行它实际上更快,其中一种是常规语句count().然而,这确实需要使用索引扫描来完成计数,这不是这个查询的情况,但我认为无论如何我都会提到它.
这是针对具有相同需求的其他人(考虑到这个问题已经过了3年).
我有类似的问题,我不想创建2个查询.所以我做的是为总数创建一个额外的列,LIMIT并OFFSET在最后移动和子句:
SELECT SQL_CALC_FOUND_ROWS * FROM (
    SELECT `id`, `name`
    FROM `my_table`
    WHERE `name` LIKE '%prashant%'
) res,
(SELECT /*CEIL(FOUND_ROWS()/10) AS 'pages',*/ FOUND_ROWS() AS 'total') tot
LIMIT 0, 10
所以结果是这样的
| id  |      name      | total |
+-----+----------------+-------+
|  1  | Jason Prashant |  124  |
|  2  | Bob Prashant   |  124  |
|  3  | Sam Prashant   |  124  |
|  4  | etc. prashant  |  124  |
我认为这个解决方案在计时方面没有任何缺点,因为它只获取一次结果,然后使用已经计算的附加列的行数.
| 归档时间: | 
 | 
| 查看次数: | 17131 次 | 
| 最近记录: |