Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

जटिल फ़िल्टरिंग के साथ 1 यादृच्छिक पंक्ति का चयन करें

मेरे पास दो समस्या समाधान हैं।

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 मिला अंत से (उपयोगकर्ता मैच होने से पहले समाप्त हो सकते हैं)

दूसरा समाधान धीमा है लेकिन दोषों के बिना!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL ट्रिगर:एक निश्चित डेटाटाइम तक पहुंचने पर अपडेट करें

  2. 'mysqldump' का उपयोग करके CSV प्रारूप में सभी तालिकाओं को डंप करें

  3. LIKE . का उपयोग करके GROUP_CONCAT खोजें

  4. PHP में पीडीओ के लिए अपवादों को स्वचालित रूप से पकड़ें

  5. php में mysql डेटाबेस से ग्राफ़ और चार्ट कैसे उत्पन्न करें?