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

MySQL chọn hàng ngẫu nhiên với JOIN từ hai bảng

Đó là cách sắp xếp đang làm bạn chậm lại. Thay vì sắp xếp theo ngẫu nhiên, chỉ cần chọn một product_db.unique_id ngẫu nhiên

Trong truy vấn của bạn, hãy thay thế ORDER BY RAND() với:

AND product_db.unique_id >= ROUND(RAND()*(SELECT MAX(unique_id) FROM product_db))

sử dụng >= thay vì = trong trường hợp unique_id đó đã bị xóa khỏi cơ sở dữ liệu. Không phải là một kết quả ngẫu nhiên như sắp xếp theo rand nhưng truy vấn sẽ thực thi nhanh hơn nhiều. Nếu muốn, bạn có thể chạy nhiều truy vấn với = cho đến khi một kết quả được tìm thấy và nó vẫn có thể nhanh hơn việc sắp xếp tất cả các kết quả đó.

Với một JOIN rõ ràng, nó sẽ là:

SELECT product_db.image
FROM product_db
JOIN product_page ON product_db.unique_id = product_page.product_unique_id
WHERE product_page.page_id = 3 
AND product_db.status = 'Online' 
AND product_db.unique_id >= ROUND(RAND()*(SELECT MAX(unique_id) FROM product_db))
LIMIT 1


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhiều điều kiện AND MySQL

  2. Regex để khớp với các nhận xét MySQL

  3. NodeJS / mySQL - ER_ACCESS_DENIED_ERROR Quyền truy cập bị từ chối đối với người dùng 'root' @ 'localhost' (sử dụng mật khẩu:CÓ)

  4. Xóa tất cả các hàng có dấu thời gian cũ hơn x ngày

  5. Trong MySQL, làm thế nào để trả về tuần trong tháng?