Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Problema ao selecionar uma única linha aleatória da tabela MySQL


Seu código está retornando várias linhas porque rand() é avaliado em cada linha. Então, você tem a mudança de várias correspondências. E uma chance de nenhuma partida.

Você pode usar sua ideia, mas tente desta forma:
select relusers.uname
from relusers cross join
     (selext @rand := rand()) const
where relusers.users_id = floor(@rand*46+1);

Isso gera apenas um valor aleatório e, portanto, apenas uma linha. Mas, com apenas 46 linhas, o order by método deve funcionar bem o suficiente:
select relusers.uname
from relusers
order by rand()
limit 1;