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 :
- 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)
- suppression de l'alias
profile3
pour votre 2ème requête - 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.