Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Chọn các hàng ngẫu nhiên với MySQL

ORDER BY RAND() giải pháp mà hầu hết mọi người đề xuất không chia tỷ lệ thành các bảng lớn, như bạn đã biết.

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;

Tôi đề cập đến vấn đề này và các giải pháp khác trong cuốn sách của mình, Phản vật chất SQL:Tránh cạm bẫy của lập trình cơ sở dữ liệu .

Nếu bạn muốn làm điều này với PHP, bạn có thể làm như thế này (không thử nghiệm):

<?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. Sửa lỗi Quyền truy cập bị từ chối cho người dùng 'root' @ 'localhost' cho phpMyAdmin

  2. Làm cách nào để điền menu thả xuống thứ hai dựa trên lựa chọn của menu thả xuống đầu tiên bằng cách sử dụng jQuery / AJAX và PHP / MySQL?

  3. Hiệu suất MySQL DigitalOcean tốt nhất - ScaleGrid so với Cơ sở dữ liệu được quản lý DigitalOcean

  4. Xóa các hàng trùng lặp trong MySQL (Bỏ qua khóa chính)

  5. Cách kiểm tra xem một bảng đã tồn tại chưa trước khi tạo nó trong MySQL