Det här är din lösning:
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();
Ändringarna som jag har gjort är:
- var och en av dina frågor som är en del av UNION ska stå inom parentes (visas i fet stil för den första frågan, den andra är redan inkapslad)
- tog bort aliaset
profile3
för din andra fråga - för den sista
ORDER BY RAND()
, måste du skapa UNION-resultatuppsättningen till en härledd tabell; Jag har gett denTEMP
som alias
Jag har inte testat ovanstående fråga men jag hoppas att det ska fungera. Låt mig veta dina resultat.