Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

pilih 1 baris acak dengan penyaringan kompleks

Saya punya dua solusi masalah.

1) Dengan id acak, dari 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) Dengan 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

Solusi pertama lebih cepat tetapi ada masalah dengan "lubang di id " dan ketika Anda mendapatkan id dari akhir (pengguna dapat mengakhiri lebih awal dari akan ada pertandingan)

Solusi kedua lebih lambat tetapi tanpa cacat!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mesin Docker di Mac:Tidak dapat melihat Volume yang dipasang di Host/mesin buruh pelabuhan? Di mana volume disimpan secara fisik?

  2. Hubungan bersarang dengan Sequelize

  3. MySQL bergabung dengan tabel di mana nama tabel adalah bidang dari tabel lain

  4. MySQL memberikan kesalahan membaca ECONNRESET setelah waktu idle di server node.js

  5. Impor database MySQL ke dalam MS SQL Server