我想用 WHERE 语句运行一个简单的查询,只返回一些列,如下所示:
SELECT var1, var2 FROM table WHERE key=1
这按预期运行并返回许多行。但是,我实际上想检索所有匹配的行并计算受影响的行。但如果我试试这个:
SELECT COUNT(*) AS count, var1, var2 FROM table WHERE key=1
我得到了计数,只有第一行。
是否可以在一个查询中同时获取多行并计算受影响的行?
您可以通过子查询来获取总记录数
SELECT var1, var2,
(SELECT COUNT(*) FROM tableName WHERE columnName = 1) AS `COUNT`
FROM tableName
WHERE columnName = 1
MySQL 有一个专门用于此的工具。像这样添加SQL_CALC_FOUND_ROWS
到您的声明中:
SELECT SQL_CALC_FOUND_ROWS var1, var2 FROM table WHERE key=1
然后你可以使用SELECT FOUND_ROWS()
此计数忽略LIMIT
原始语句中的子句!
此外,它必须按顺序执行。如果您等待太久,另一个SQL_CALC_FOUND_ROWS
可能会覆盖您之前的计数。
编辑:对不起,这不在一个查询中。不过,这比子查询更有效。
PS:实际上,为什么不在您检索实际计数的数据后简单地在 php 中计数()结果?