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

Zapytania MySQL UNION 2 zawierające ORDER BYs

To jest Twoje rozwiązanie:

SELECT *
FROM
(
    **(**
        SELECT profileId
        FROM 
        (
            SELECT profileId
            FROM profile profile2
            WHERE profile2.profilePublishDate <= Now()
            ORDER BY profile2.profilePublishDate DESC
            LIMIT 0,40
        ) AS profile1
        ORDER BY RAND()
        LIMIT 0,20
    **)**
    UNION
    (
        SELECT profileId
        FROM profile profile4
        WHERE profileId NOT IN (
            SELECT profileId
            FROM profile profile4
            WHERE profile4.profilePublishDate <= Now()
            ORDER BY profile4.profilePublishDate DESC
            LIMIT 0,40
            )
        ORDER BY RAND()    
        LIMIT 0,40
    )
) TEMP
ORDER BY RAND();

Zmiany, które wprowadziłem to:

  1. Każde z Twoich zapytań, które są częścią UNION, powinno być ujęte w nawiasy kwadratowe (pokazane pogrubioną czcionką w pierwszym zapytaniu; drugie jest już ujęte)
  2. usunął alias profile3 dla drugiego zapytania
  3. dla ostatecznego ORDER BY RAND() , należy utworzyć zestaw wyników UNION do tabeli pochodnej; Dałem mu TEMP jako alias

Nie testowałem powyższego zapytania, ale mam nadzieję, że zadziała. Daj mi znać o swoich ustaleniach.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. F# błąd „błąd FS0039:Przestrzeń nazw lub moduł „MySql” nie jest zdefiniowany”?

  2. nie można upuścić klucza obcego

  3. MySQL JOIN z LIMIT 1 na połączonym stole

  4. Zapytania składające z różnych baz danych w Laravel Query Builder

  5. MySQL JOIN zwraca NULL pól