Váš kód vrací několik řádků, protože rand()
se vyhodnocuje na každém řádku. Takže máte výměnu několika zápasů. A šance na žádné zápasy.
Můžete použít svůj nápad, ale zkuste to takto:
select relusers.uname
from relusers cross join
(selext @rand := rand()) const
where relusers.users_id = floor(@rand*46+1);
To vygeneruje pouze jednu náhodnou hodnotu, a tedy pouze jeden řádek. Ale s pouhými 46 řádky order by
metoda by měla fungovat dostatečně dobře:
select relusers.uname
from relusers
order by rand()
limit 1;