sql >> Databáze >  >> RDS >> Mysql

vyberte 1 náhodný řádek s komplexním filtrováním

Mám dvě řešení problému.

1) S náhodným ID, z 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) Pomocí 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

První řešení je rychlejší, ale má problém s "dírami v id " a když získáte id od konce (uživatelé mohou skončit dříve, než dojde ke shodě)

Druhé řešení je pomalejší, ale bez chyb!



  1. jak synchronizovat sqlite s mysql

  2. Přiřazení obrázků k uzlům stromového zobrazení-2

  3. PHP - Import CSV souboru do mysql databáze pomocí LOAD DATA INFILE

  4. Zavřít nebylo v databázi nikdy explicitně voláno