Como COUNT número de linhas com LIMIT?

9

Eu quero pegar X linhas, então eu defino LIMIT X; mas como posso contar simultaneamente o número total de linhas também?

Atualmente, eu uso duas consultas separadas para fazê-lo como

SELECT COUNT(*) FROM col WHERE CLAUSE
SELECT * FROM col WHERE CLAUSE LIMIT X

Existe uma maneira de fazer isso em uma consulta?

EDIT: A saída deve ser as colcélulas e o número de linhas. De fato, depois de selecionar as colcélulas, ele deve passar por cima da mesa para contar apenas.

Eu sei que não é possível mesclar essas duas consultas, como o primeiro retorno 1 linha, mas o segundo X linhas. Estou curioso para saber se existe uma função no mysql para retornar o número de linhas na presença de LIMIT.

Googlebot
fonte
Você poderia mostrar uma linha ou duas da sua saída desejada?
Dezso
11
As duas consultas não são compatíveis, como estão atualmente escritas: uma retorna um único registro com uma única coluna, a outra retornará muitas colunas em X linhas. Por favor, mostre um exemplo da saída desejada, se você quiser dar uma resposta significativa.
FrustratedWithFormsDesigner

Respostas:

5

Parece que você deseja executar o LIMIT, mas ainda sabe quantas linhas teriam sido retornadas sem o LIMIT. Confira FOUND ROWS

Alain Collins
fonte
11
Marcar isso com +1 FOUND ROWSe, embora ainda esteja executando duas consultas, pode ser um desempenho melhor do que executar uma segunda consulta COUNT (*) (dependendo das consultas e do conjunto de dados).
Derek Downey #
Isto é exatamente o que eu quis dizer. Eu sabia que mysqlnão nos deixará sozinhos em uma questão tão importante;)
Googlebot
11
Ainda bem que ajudaria. Não se preocupe, o mysql ainda vai te ferrar em várias questões importantes.
Alain Collins
@DTest: ou (pode ser) pior desempenho do que executar uma segunda consulta COUNT (*).
usar o seguinte código
@ypercube precisamente #
Derek Downey
3

Use SQL_CALC_FOUND_ROWSna sua consulta SELECT e execute SELECT FOUND_ROWS():

SELECT SQL_CALC_FOUND_ROWS field_name,filed_name2 FROM col WHERE CLAUSE LIMIT X;
SELECT FOUND_ROWS() ;
Dipa
fonte
11
Isso se beneficiaria com algumas limpezas e mais alguns detalhes para que seja mais útil.
RLF
2

Eu sei que isso é antigo, mas não é mais válido, com MySQL> = 8.0.17 cf Função MySQL Found_Rows () Portanto, ainda temos que emitir as duas consultas, por exemplo. adicione um com o COUNT(), infelizmente.

Fred
fonte