Ihr Code gibt mehrere Zeilen zurück, weil rand()
wird in jeder Zeile ausgewertet. Sie haben also die Möglichkeit, mehrere Übereinstimmungen zu ändern. Und die Chance, dass es überhaupt keine Übereinstimmungen gibt.
Sie können Ihre Idee verwenden, aber versuchen Sie es auf diese Weise:
select relusers.uname
from relusers cross join
(selext @rand := rand()) const
where relusers.users_id = floor(@rand*46+1);
Dies erzeugt nur einen zufälligen Wert und somit nur eine Zeile. Aber mit nur 46 Zeilen ist die order by
Methode sollte gut genug funktionieren:
select relusers.uname
from relusers
order by rand()
limit 1;