Mysql
 sql >> Baza danych >  >> RDS >> Mysql

wybierz 1 losowy wiersz ze złożonym filtrowaniem

Mam dwa rozwiązania problemów.

1) Z losowym identyfikatorem, od 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) Z 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

Pierwsze rozwiązanie jest szybsze, ale ma problem z „dziurami w id " i kiedy otrzymasz id od końca (użytkownicy mogą zakończyć wcześniej niż będzie mecz)

Drugie rozwiązanie jest wolniejsze, ale bez wad!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Obcinanie ciągów na długość, ale nie wolno ciąć słów

  2. Wybierz rodziców i dzieci z MySQL

  3. apostrof podczas wstawiania (Mysql)

  4. Jak przechwycić żądania DB? (MySQL)

  5. BŁĄD:HHH000299:Nie można ukończyć aktualizacji schematu java.lang.NullPointerException