Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL के साथ यादृच्छिक पंक्तियों का चयन करना

ORDER BY RAND() जैसा कि आप पहले से ही जानते हैं, अधिकांश लोग जिस समाधान की अनुशंसा करते हैं, वह बड़ी तालिकाओं के पैमाने पर नहीं होता है।

SET @r := (SELECT FLOOR(RAND() * (SELECT COUNT(*) FROM mytable)));
SET @sql := CONCAT('SELECT * FROM mytable LIMIT 1 OFFSET ', @r);
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;

मैं इसे और अन्य समाधानों को अपनी पुस्तक में शामिल करता हूं, SQL Antipatterns:डेटाबेस प्रोग्रामिंग के नुकसान से बचना

यदि आप इसे PHP के साथ करना चाहते हैं, तो आप ऐसा कुछ कर सकते हैं (परीक्षण नहीं किया गया):

<?php
$mysqli->begin_transaction();
$result = $mysqli->query("SELECT COUNT(*) FROM mytable")
$row = $result->fetch_row(); 
$count = $row[0]; 
$offset = mt_rand(0, $count);
$result = $mysqli->query("SELECT * FROM mytable LIMIT 1 OFFSET $offset");
...
$mysqli->commit();


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL में लोअरकेस अक्षरों को अपरकेस में कैसे बदलें

  2. MySQL एक रिकॉर्ड में कई शब्दों का मिलान करने के लिए LIKE या REGEXP चुनें

  3. MySQL में करंट कनेक्शन के लिए लोकेल कैसे सेट करें

  4. चेतावनी:mysqli_connect ():(HY000/2002):ऐसी कोई फ़ाइल या निर्देशिका नहीं

  5. त्रुटि 1067 (42000):'created_at' के लिए अमान्य डिफ़ॉल्ट मान