Mysql
 sql >> Database >  >> RDS >> Mysql

Query MySQL UNION 2 contenenti ORDER BY

Questa è la tua soluzione:

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

Le modifiche che ho apportato sono:

  1. Ogni query che fa parte di UNION deve essere racchiusa tra parentesi (mostrata in grassetto per la prima query; la seconda è già racchiusa)
  2. rimosso l'alias profile3 per la tua seconda domanda
  3. per l'ORDER BY RAND() finale , è necessario creare il set di risultati UNION in una tabella derivata; Gli ho dato TEMP come alias

Non ho testato la query di cui sopra, ma spero che dovrebbe funzionare. Fammi sapere le tue scoperte.