मेरे पास दो समस्या समाधान हैं।
1) रैंडम आईडी के साथ, 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) 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
पहला समाधान तेज़ है लेकिन इसमें "id
में छेद" की समस्या है " और जब आपको id
मिला अंत से (उपयोगकर्ता मैच होने से पहले समाप्त हो सकते हैं)
दूसरा समाधान धीमा है लेकिन दोषों के बिना!