Como seccionar uma lista, usando a cláusula LIMIT do MySQL – Elias Praciano
Categories
Banco de dados Tutoriais

Como seccionar uma lista, usando a cláusula LIMIT do MySQL

Como paginar e seccionar os resultados das queries MYSQL, usando a cláusula LIMIT.

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.
Capa do tutorial MySQL - a cláusula LIMIT
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.

By Elias Praciano

Autor de tecnologia (livre, de preferência), apaixonado por programação e astronomia.
Fã de séries, como "Rick and Morty" e "BoJack Horseman".
Me siga no Twitter e vamos trocar ideias!

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

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.