Você não pode usar uma coluna com um valor RAND() em uma cláusula ORDER BY porque ORDER BY recalculará a coluna várias vezes. No entanto, no MySQL3.23, você pode fazer: SELECT * FROM table_name ORDER BY RAND(), o que é útil para obter um SELECT * FROM table1,table2 WHERE a=b AND c para obter aleatoriedade. Declaração para completar a tarefa:
SELECT * FROM nome_tabela ORDER BY rand() LIMIT 5;
Rand diz isso no manual::
ALEATÓRIO()
Rand(N)
Retorna um valor de ponto flutuante aleatório no intervalo de 0 a 1,0. Se um parâmetro inteiro N for especificado, ele será usado como valor inicial.
mysql> selecione RAND();
-> 0,5925
mysql> selecione RAND(20);
-> 0,1811
mysql> selecione RAND(20);
-> 0,1811
mysql> selecione RAND();
-> 0,2079
mysql> selecione RAND();
-> 0,7888
Você não pode usar uma coluna com um valor RAND() em uma cláusula ORDER BY porque ORDER BY recalculará a coluna várias vezes. No entanto, no MySQL3.23, você pode fazer: SELECT * FROM table_name ORDER BY RAND(), o que é útil para obter um SELECT * FROM table1,table2 WHERE a=b AND c
Observe que um RAND() em uma cláusula WHERE será reavaliado cada vez que WHERE for executado.
Mas eu tentei. Para uma tabela com 8.000 registros, leva 0,08 segundos para ser executada uma vez, o que é um pouco lento. Posteriormente, consultei o Google e obtive o seguinte código:
SELECT * FROM nome_tabela AS r1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM nome_tabela)) AS id) AS r2 WHERE r1.id >= r2.id ORDER BY r1.id ASC LIMIT 5;
A eficiência de execução requer 0,02 segundos. Infelizmente, apenas o mysql 4.1.* e superior suportam tais subconsultas.