Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requêtes MySQL UNION 2 contenant des ORDER BY

Voici votre solution :

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

Les modifications que j'ai apportées sont :

  1. chacune de vos requêtes faisant partie d'UNION doit être placée entre parenthèses (en gras pour la première requête ; la seconde est déjà placée)
  2. suppression de l'alias profile3 pour votre 2ème requête
  3. pour le dernier ORDER BY RAND() , vous devez créer le jeu de résultats UNION dans une table dérivée ; Je lui ai donné TEMP comme alias

Je n'ai pas testé la requête ci-dessus mais j'espère que cela devrait fonctionner. Faites-moi part de vos découvertes.