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. Неправилна стойност на низа при опит за вмъкване на UTF-8 в MySQL чрез JDBC?

  2. Как да активирам автоматично повторно свързване на MySQL клиент с MySQLdb?

  3. MySQL заявка ГРУПА ПО ден/месец/година

  4. Как работят MySQL индексите?

  5. Обектът от клас DateTime не може да бъде преобразуван в низ