Summary: neste tutorial, você aprenderá várias técnicas para selecionar registros aleatórios de uma tabela de banco de dados no MySQL.
Por vezes, você tem que selecionar registros aleatórios de uma tabela, por exemplo:
- Selecionar alguns posts aleatórios em um blog e exibi-los na barra lateral.
- Selecionar uma citação aleatória para exibir o widget “quote of the day”.
- Selecionar imagens aleatórias em uma galeria e usar como as imagens em destaque.
MySQL seleciona registros aleatórios usando ORDER BY RAND()
MySQL não tem nenhuma instrução embutida para selecionar linhas aleatórias de uma tabela. Para realizar isto, você usa a função RAND()
function.
A consulta seguinte selecciona uma linha aleatória de uma tabela de base de dados:
Code language: SQL (Structured Query Language) (sql)
Vamos examinar a consulta com mais detalhe.
- A função
RAND()
Gera um valor aleatório para cada linha da tabela. - A cláusula
ORDER BY
ordena todas as linhas da tabela pelo número aleatório gerado pela função.RAND()
- A cláusula
LIMIT
colhe a primeira linha do conjunto de resultados ordenados aleatoriamente.
Se você quiser selecionar N
registros aleatórios de uma tabela de banco de dados, você precisa alterar a cláusula LIMIT
da seguinte forma:
Code language: SQL (Structured Query Language) (sql)
Veja o seguinte customers
tabela do banco de dados de amostra.
>
O exemplo seguinte selecciona cinco clientes aleatórios da tabela customers
:
Code language: SQL (Structured Query Language) (sql)
Try It Out
Note que você pode obter um conjunto de resultados diferente porque é aleatório.
Esta técnica funciona muito bem com uma pequena tabela. Entretanto, será lenta para a tabela grande porque o MySQL tem que ordenar toda a tabela para selecionar as aleatórias.
A velocidade da consulta também depende do número de linhas na tabela. Quanto mais linhas a tabela tiver, mais tempo leva para gerar o número aleatório para cada linha.
MySQL seleciona registros aleatórios usando a cláusula INNER JOIN
Esta técnica requer que a tabela tenha um campo de chave primária de auto-incremento e não há nenhuma lacuna na seqüência.
A consulta seguinte gera um número aleatório baseado na coluna da chave primária:
Code language: SQL (Structured Query Language) (sql)
Podemos juntar a tabela com o conjunto de resultados retornados pela consulta acima como segue:
Code language: SQL (Structured Query Language) (sql)
Usando esta técnica, você deve executar a consulta várias vezes para obter mais de uma linha aleatória, porque se você aumentar o limite, a consulta só lhe dará linhas seqüenciais que começam a partir da linha selecionada aleatoriamente.
A consulta seguinte retorna um cliente aleatório da tabela customers
.
Code language: SQL (Structured Query Language) (sql)
Try It Out
MySQL selecciona registos aleatórios usando variáveis
No caso, a tabela tem id
coluna com os valores que estão dentro de um intervalo 1..N
e não há nenhuma lacuna no intervalo, você pode usar a seguinte técnica:
- Primeiro, seleccione números aleatórios no intervalo 1.N.N.
- Segundo, escolha os registos com base nos números aleatórios.
A seguinte afirmação ajuda-o a conseguir isto:
Code language: SQL (Structured Query Language) (sql)
Note que as variáveis definidas pelo utilizador são específicas da ligação. Isso significa que essa técnica não pode ser usada com o pooling de conexões. Além disso, a chave primária deve ser do tipo inteiro e seus valores devem estar na seqüência sem intervalos.
Neste tutorial, mostramos várias técnicas para selecionar registros aleatórios de uma tabela.
- Este tutorial foi útil?
- Sim Não