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:
- Ogni query che fa parte di UNION deve essere racchiusa tra parentesi (mostrata in grassetto per la prima query; la seconda è già racchiusa)
- rimosso l'alias
profile3
per la tua seconda domanda - per l'
ORDER BY RAND()
finale , è necessario creare il set di risultati UNION in una tabella derivata; Gli ho datoTEMP
come alias
Non ho testato la query di cui sopra, ma spero che dovrebbe funzionare. Fammi sapere le tue scoperte.