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

chọn 1 hàng ngẫu nhiên với tính năng lọc phức tạp

Tôi có hai giải pháp cho vấn đề.

1) Với id ngẫu nhiên, từ https://stackoverflow.com/a/4329447/2051938

SELECT *
FROM profiles AS r1
JOIN
    (SELECT CEIL(RAND() *
                     (SELECT MAX(id)
                        FROM profiles)) AS id)
        AS r2
WHERE
    r1.id >= r2.id
    AND
    r1.first_name IS NOT NULL
AND
NOT EXISTS (
    SELECT *
    FROM proposal
    WHERE
        proposal.to_id = r1.id
)
LIMIT 0 , 1

2) Với ORDER BY RAND()

SELECT *
FROM
    (
        SELECT *
        FROM profiles
        WHERE
            profiles.first_name IS NOT NULL
        ORDER BY RAND()
    ) AS users
WHERE
    NOT EXISTS (
        SELECT *
        FROM proposal
        WHERE
            proposal.to_id = users.id
    )
LIMIT 0 , 1

Giải pháp đầu tiên nhanh hơn nhưng có vấn đề với "lỗ hổng trong id "và khi bạn có id từ cuối (người dùng có thể kết thúc sớm hơn khi có trận đấu)

Giải pháp thứ hai chậm hơn nhưng không có sai sót!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Woocommerce nhận Mã sản phẩm bằng SKU sản phẩm

  2. Tự động điền trong MySQL trong Windows

  3. Làm cách nào để kết nối với MySQL 5.1 trong Visual Studio 2010?

  4. Lỗi PDO:Số tham số không hợp lệ:tham số không được xác định

  5. Khối lượng công việc kết hợp cơ sở dữ liệu OLTP / Analytics trong Galera Cluster bằng cách sử dụng các nô lệ không đồng bộ