Il tuo codice restituisce più righe perché rand()
viene valutato su ogni riga. Quindi, hai il cambio di più corrispondenze. E una possibilità di nessuna corrispondenza.
Puoi usare la tua idea, ma prova in questo modo:
select relusers.uname
from relusers cross join
(selext @rand := rand()) const
where relusers.users_id = floor(@rand*46+1);
Questo genera solo un valore casuale e quindi solo una riga. Ma, con solo 46 righe, order by
il metodo dovrebbe funzionare abbastanza bene:
select relusers.uname
from relusers
order by rand()
limit 1;