我在表中搜索记录如下:
SELECT Id, Name FROM my_table WHERE Name LIKE '%prashant%' LIMIT 0, 10;
Run Code Online (Sandbox Code Playgroud)
现在,我正在添加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();
Run Code Online (Sandbox Code Playgroud)
Emi*_*l H 10
MySQL支持使用SQL_CALC_FOUND_ROWS
Ionut提到的这样做.然而,事实证明,在许多情况下,使用两种语句以旧式方式执行它实际上更快,其中一种是常规语句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
Run Code Online (Sandbox Code Playgroud)
所以结果是这样的
| id | name | total |
+-----+----------------+-------+
| 1 | Jason Prashant | 124 |
| 2 | Bob Prashant | 124 |
| 3 | Sam Prashant | 124 |
| 4 | etc. prashant | 124 |
Run Code Online (Sandbox Code Playgroud)
我认为这个解决方案在计时方面没有任何缺点,因为它只获取一次结果,然后使用已经计算的附加列的行数.