Kode Anda mengembalikan beberapa baris karena rand()
dievaluasi pada setiap baris. Jadi, Anda memiliki perubahan beberapa pertandingan. Dan kemungkinan tidak ada pertandingan sama sekali.
Anda dapat menggunakan ide Anda, tetapi cobalah cara ini:
select relusers.uname
from relusers cross join
(selext @rand := rand()) const
where relusers.users_id = floor(@rand*46+1);
Ini menghasilkan hanya satu nilai acak dan karenanya hanya satu baris. Namun, dengan hanya 46 baris, order by
metode harus berkinerja cukup baik:
select relusers.uname
from relusers
order by rand()
limit 1;