Votre code renvoie plusieurs lignes car rand()
est évalué sur chaque ligne. Donc, vous avez le changement de plusieurs matchs. Et une chance de ne pas correspondre du tout.
Vous pouvez utiliser votre idée, mais essayez de cette façon :
select relusers.uname
from relusers cross join
(selext @rand := rand()) const
where relusers.users_id = floor(@rand*46+1);
Cela génère une seule valeur aléatoire et donc une seule ligne. Mais, avec seulement 46 lignes, le order by
la méthode devrait fonctionner assez bien :
select relusers.uname
from relusers
order by rand()
limit 1;