Há alturas em que pode ser necessário ordenar aleatoriamente um conjunto de resultados MySQL, por exemplo, ao escolher alguns vencedores ao acaso para um sorteio de prémios. Este post olha como você faria isso e o próximo post do MySQL irá olhar para os dados de ordenação “aleatória” em várias páginas.
Usando o exemplo do sorteio do prêmio, digamos que nós conduzimos uma pesquisa e íamos dar um prêmio para 10 das pessoas que completaram a pesquisa. Estas pessoas devem ser escolhidas aleatoriamente. A tabela é chamada de “pesquisa” e queremos os seus dados de contacto.
Para seleccionar 10 registos da tabela em ordem aleatória, faça o seguinte:
A linha ORDER BY RAND() é o que torna o conjunto de resultados aleatório, e a linha LIMIT 10 retorna apenas os primeiros 10 resultados.
Ordenar um conjunto de resultados aleatoriamente desta forma é ineficiente e será lento em grandes conjuntos de resultados, porque o número aleatório tem de ser aplicado a cada linha antes de ser ordenado. Com o propósito de escolher um vencedor ou circunstâncias similares, é ótimo, mas não é muito útil se você precisar paginar resultados “aleatórios” em várias páginas.
Se você precisar paginar os dados “aleatoriamente” usando RAND() não é muito útil porque os mesmos registros aparecerão em várias páginas, e você não obterá um conjunto de dados consistente ao paginar para trás e para frente nas mesmas páginas. Eu vou ver como fazer isso no post do MySQL da próxima semana. Certifique-se de subscrever o meu feed RSS (detalhes abaixo) para não perder.