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.


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


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() ;

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.