आपका कोड कई पंक्तियों को लौटा रहा है क्योंकि rand()
प्रत्येक पंक्ति पर मूल्यांकन किया जाता है। तो, आपके पास कई मैचों का परिवर्तन है। और कोई मैच नहीं होने का मौका।
आप अपने विचार का उपयोग कर सकते हैं, लेकिन इसे इस तरह से आजमाएं:
select relusers.uname
from relusers cross join
(selext @rand := rand()) const
where relusers.users_id = floor(@rand*46+1);
यह केवल एक यादृच्छिक मान उत्पन्न करता है और इसलिए केवल एक पंक्ति। लेकिन, केवल 46 पंक्तियों के साथ, order by
विधि पर्याप्त रूप से अच्छा प्रदर्शन करे:
select relusers.uname
from relusers
order by rand()
limit 1;