Dit is jouw oplossing:
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 wijzigingen die ik heb aangebracht zijn:
- elk van uw zoekopdrachten die deel uitmaken van UNION moet tussen haakjes staan (vetgedrukt weergegeven voor de eerste zoekopdracht; de tweede is al tussen haakjes weergegeven)
- de alias
profile3
verwijderd voor je tweede vraag - voor de laatste
ORDER BY RAND()
, moet u de UNION-resultatenset naar een afgeleide tabel maken; Ik heb hetTEMP
gegeven als de alias
Ik heb de bovenstaande query niet getest, maar ik hoop dat het zou moeten werken. Laat me je bevindingen weten.