Dette er 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();
De ændringer, jeg har foretaget, er:
- hver af dine forespørgsler, der er en del af UNION, skal være indkapslet i parentes (vist med fed skrift for den første forespørgsel; den anden er allerede indkapslet)
- fjernede aliasset
profile3
til din 2. forespørgsel - for den endelige
ORDER BY RAND()
, skal du oprette UNION-resultatsættet til en afledt tabel; Jeg har givet denTEMP
som alias
Jeg har ikke testet ovenstående forespørgsel, men jeg håber det skulle virke. Fortæl mig dine resultater.