A cláusula LIMIT pode ser usada para obter informações contidas no meio de uma lista, e não apenas nas extremidades (início ou fim) da consulta.
O uso básico da cláusula LIMIT, já foi discutido no artigo Como usar LIMIT para selecionar registros do começo ou do fim de uma tabela no MySQL — sugiro-o como leitura complementar.
Neste texto, vou mostrar como obter determinadas linhas, no “miolo” de uma relação e como é possível fazer paginação, com LIMIT — ou seja, dividir uma relação em múltiplas páginas.
Para que o LIMIT possa realizar a tarefa é necessário que você diga em que posição, na lista, ele deve começar, além da quantidade de linhas que você deseja que sejam exibidas.
A cláusula LIMIT aceita 2 argumentos:
- O primeiro determina quantas linhas devem ser “puladas” ou ignoradas.
- O segundo determina quantas linhas da lista devem ser exibidas.
Isto significa que você pode usar a cláusula LIMIT para pular 2 linhas e mostram a próxima, por exemplo. Isto permite responder perguntas um pouco mais complexas, como “Qual o quinto maior valor num determinado campo?” ou “Qual o terceiro menor valor?” — que seria mais difíceis de responder com as funções MIN() ou MAX().
Vamos aos exemplos.
Como paginar resultados com a cláusula LIMIT, no MySQL
Distribuir em várias páginas os resultados de uma query MySQL com o LIMIT é muito fácil — ele é feito pra isso.
Veja um exemplo básico de paginação de 2 em 2 (para não ficar muito extenso):
SELECT idCli,nomeCli,emailCli FROM CadCli LIMIT 2;
Na primeira parte, peço a lista limitada aos 2 primeiros registros:
+-------+-----------------+--------------------------------+ | idCli | nomeCli | emailCli | +-------+-----------------+--------------------------------+ | 1 | Tana Mclaughlin | eget.tincidunt@magnisdis.net | | 2 | Jakeem Klein | mauris.eu@Nuncmaurissapien.com | +-------+-----------------+--------------------------------+ 2 rows in set (0.00 sec)
A lista segue, pulando 2 resultados, limitada a 2 linhas:
SELECT idCli,nomeCli,emailCli FROM CadCli LIMIT 2,2;
+-------+-----------------+-------------------------------+ | idCli | nomeCli | emailCli | +-------+-----------------+-------------------------------+ | 3 | Wylie Carroll | convallis.in.cursus@libero.ca | | 4 | Colton Franklin | dui.lectus.rutrum@eusem.org | +-------+-----------------+-------------------------------+ 2 rows in set (0.00 sec)
Concluo o exemplo, exibindo a próxima página, depois do quarto registro, limitado a 2 linhas:
SELECT idCli,nomeCli,emailCli FROM CadCli LIMIT 4,2;
+-------+-----------------+------------------------------------------+ | idCli | nomeCli | emailCli | +-------+-----------------+------------------------------------------+ | 5 | Amity Whitfield | risus.Quisque.libero@Praesenteudui.co.uk | | 6 | Sade Carver | Donec@Innec.com | +-------+-----------------+------------------------------------------+ 2 rows in set (0.00 sec)
Dentro de um script, podemos usar um loop para fazer este trabalho.
Nota: Você pode usar qualquer tabela disponível para você para praticar. Se você fizer questão de usar a mesma tabela deste artigo, é possível obtê-la aqui.
Como obter o maior ou menor valor de um campo, usando o LIMIT
Para realizar este trabalho, vou acrescentar a cláusula DESC em uma das queries.
Veja como obter o maior valor em uma coluna da tabela:
SELECT nomeCli, creditoCli FROM CadCli ORDER BY creditoCli DESC LIMIT 1;
+---------------+------------+ | nomeCli | creditoCli | +---------------+------------+ | Steven Stokes | 84831 | +---------------+------------+ 1 row in set (0.00 sec)
Se a pergunta fosse “Qual o email do cliente com o menor valor de crédito?”, a resposta poderia ser obtida assim:
SELECT nomeCli AS Cliente, emailCli AS "Email p/contato", creditoCli FROM CadCli ORDER BY creditoCli LIMIT 1;
+-----------------+----------------------------------+------------+ | Cliente | Email p/contato | creditoCli | +-----------------+----------------------------------+------------+ | Hanna Mccormick | molestie.tortor.nibh@indolor.org | 600 | +-----------------+----------------------------------+------------+ 1 row in set (0.00 sec)
E, se a pergunta for “Qual o nome do cliente com o segundo maior crédito?”
SELECT nomeCli AS Cliente, emailCli AS "Email p/contato", creditoCli FROM CadCli ORDER BY creditoCli DESC LIMIT 1,1;
+-------------+-----------------------+------------+ | Cliente | Email p/contato | creditoCli | +-------------+-----------------------+------------+ | Yvonne Wise | habitant@odioEtiam.ca | 84531 | +-------------+-----------------------+------------+ 1 row in set (0.00 sec)
Espero que este post resolva as suas dúvidas sobre como seccionar relatórios no MySQL, como a cláusula LIMIT. Você pode usar a caixa de buscas, no topo do site, para encontrar tutoriais e receitas MySQL.
One reply on “Como seccionar uma lista, usando a cláusula LIMIT do MySQL”
Uma dúvida:
Eu poderia usar o LIMIT junto com o UNION ou outro join pra fazer uma query onde eu pudesse dividir ou agrupar o resultado de uma consulta por quantidade específica. Ou seja, a cada 3 valores iguais retorno 1 diferente.
Exemplo:
Senha 12 – prioridade
Senha 13 – prioridade
Senha 14 – prioridade
Senha 15 – convencional
Senha 16 – prioridade
Senha 17 – prioridade
Senha 18 – prioridade
Senha 19 – convencional
.
.
.
.
é assim continuar a query