我正在搜索页面中查找用户。我有查询来查找它们,实际上我可以使用“LIMIT startRow,numberRows”进行分页。但是在进行分页之前,如何计算找到的“寄存器”的总数?我想在搜索页面中添加在搜索中找到的用户数。

我需要类似:“第1页,共100页”。我实际上有“第1页”,但我不知道在分页之前如何计算结果总数。

¿可能需要使用“SELECT COUNT(*)”执行额外的查询吗?有没有其他方法可以在分页之前进行计数以避免再次查询?

我使用两个sql查询,一个用于单个单词,另一个用于多单词:

基本SQL查询(用于单字和多字搜索):

"SELECT * FROM accounts AS A INNER JOIN profiles AS P ON A.account_id = P.account_id "

单词条件:
"WHERE A.username LIKE ? OR P.name LIKE ? OR P.name LIKE ? OR P.surname LIKE ? OR P.surname LIKE ? LIMIT ?,?"

多字条件:
"WHERE CONCAT(P.name, ' ', P.surname) LIKE ? LIMIT ?,?"

非常感谢。

最佳答案

像这样修改查询:

SELECT SQL_CALC_FOUND_ROWS * FROM accounts ... LIMIT ...

这将返回与之前相同的限制/偏移结果(例如,结果的第一页),但是如果您随后立即将第二个查询发送到服务器...
SELECT FOUND_ROWS();

如果未将LIMIT施加在上一个查询上,则服务器将返回将返回的总行数。这是您的结果总数。

当然,这将意味着您的初始查询将花费更长的时间,因为优化器无法采用任何快捷方式,一旦满足LIMIT的要求,优化器就无法停止对行的求值,但是在某些情况下,此类快捷方式始终无法使用。

这是完成您要完成的工作的“官方”机制。

http://dev.mysql.com/doc/refman/5.7/en/information-functions.html#function_found-rows

08-04 00:06