Como contar todas as linhas ao usar SELECT com LIMIT na consulta MySQL?

Eu tenho uma consulta mysql como esta:

SELECT A.ID, A.NAME, B.ID, B.NAME FROM table1 A JOIN table2 B ON ( A.ID = B.TABLE1_ID ) WHERE cond1, cond2, ..., condN LIMIT 10 

Eu tenho muitas cláusulas where em consulta. Como melhorar essa consulta para obter também a contagem total de linhas? Não quero usar mais uma solicitação sem LIMIT.

O que você está procurando é isso

 SELECT SQL_CALC_FOUND_ROWS A.ID, A.NAME, B.ID, B.NAME FROM table1 A JOIN table2 B ON ( A.ID = B.TABLE1_ID ) WHERE cond1, cond2, ..., condN LIMIT 10 SELECT FOUND_ROWS(); 

Você pode usar o SQL_CALC_FOUND_ROWS com FOUND_ROWS () para contar o número de resultados enquanto a consulta está sendo executada. Basicamente você apenas adiciona ‘SQL_CALC_FOUND_ROWS’ depois de ‘SELECT’ e então executa outra consulta ‘SELECT FOUND_ROWS ()’ depois disso. Não é possível devolver a contagem na mesma consulta porque ela não pode saber a contagem até que a consulta seja concluída.

Há 4 anos desde a última resposta, mas é assim que resolvi o problema. Embora a resposta do SaltLake tenha produzido um erro para mim, isso me levou à resposta correta.

 SELECT SQL_CALC_FOUND_ROWS * FROM wholedatabase LIMIT 0,10 UNION SELECT 'TotalRows', FOUND_ROWS(), NULL, NULL, NULL, NULL ORDER BY IssueDate, VolumeNo 

A parte UNION é muito importante, porque marca a resposta desejada (Número total de linhas) que é recuperada no resultado do SECOND Select nos resultados da FIRST Select.

Outro ponto muito importante é que, porque uma UNIÃO está ocorrendo, ambas as tabelas devem ter o mesmo número de colunas nelas. Isso geralmente significa que você precisa preencher o SECOND Select com o importantíssimo valor FOUND_ROWS () e, em seguida, muitos valores NULL.

O resultado final será um comando que retornará 11 linhas de informação, com uma dessas linhas contendo o número total de linhas. Obviamente, você precisará excluir a linha TotalRows adicional quando chegar ao uso do resultado.

Solução de http://is.php.net/manual/en/function.mysql-num-rows.php#83647

 SELECT SQL_CALC_FOUND_ROWS '0', z.id FROM zoom AS z LIMIT 0,6 UNION SELECT '1', FOUND_ROWS() ORDER BY `0` DESC , RAND() 

Você deveria usar

 SELECT SQL_CALC_FOUND_ROWS A.ID, A.NAME, B.ID, B.NAME, FOUND_ROWS() as rCount FROM table1 A JOIN table2 B ON ( A.ID = B.TABLE1_ID ) WHERE cond1, cond2, ..., condN LIMIT 10