Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL UNION 2-Abfragen, die ORDER BYs enthalten

Das ist Ihre Lösung:

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();

Die Änderungen, die ich vorgenommen habe, sind:

  1. Jede Ihrer Abfragen, die Teil von UNION sind, sollte in eckige Klammern gesetzt werden (fett dargestellt für die erste Abfrage; die zweite ist bereits eingeschlossen)
  2. den Alias ​​profile3 entfernt für Ihre 2. Anfrage
  3. für den letzten ORDER BY RAND() , müssen Sie die UNION-Ergebnismenge in einer abgeleiteten Tabelle erstellen; Ich habe ihm TEMP gegeben als Alias

Ich habe die obige Abfrage nicht getestet, aber ich hoffe, sie sollte funktionieren. Teilen Sie mir Ihre Erkenntnisse mit.