Twój kod zwraca wiele wierszy, ponieważ rand()
jest oceniany w każdym rzędzie. Więc masz zmianę wielu meczów. I szansa na całkowity brak dopasowań.
Możesz wykorzystać swój pomysł, ale wypróbuj go w ten sposób:
select relusers.uname
from relusers cross join
(selext @rand := rand()) const
where relusers.users_id = floor(@rand*46+1);
To generuje tylko jedną losową wartość, a więc tylko jeden wiersz. Ale mając tylko 46 wierszy, order by
metoda powinna działać wystarczająco dobrze:
select relusers.uname
from relusers
order by rand()
limit 1;