rand()
のため、コードは複数の行を返しています 各行で評価されます。したがって、複数の一致の変更があります。そして、まったく一致しない可能性があります。
あなたはあなたのアイデアを使うことができますが、このようにそれを試してください:
select relusers.uname
from relusers cross join
(selext @rand := rand()) const
where relusers.users_id = floor(@rand*46+1);
これにより、ランダムな値が1つだけ生成されるため、1つの行だけが生成されます。ただし、46行しかないため、order by
メソッドは十分に機能するはずです:
select relusers.uname
from relusers
order by rand()
limit 1;