To jest Twoje rozwiązanie:
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();
Zmiany, które wprowadziłem to:
- Każde z Twoich zapytań, które są częścią UNION, powinno być ujęte w nawiasy kwadratowe (pokazane pogrubioną czcionką w pierwszym zapytaniu; drugie jest już ujęte)
- usunął alias
profile3
dla drugiego zapytania - dla ostatecznego
ORDER BY RAND()
, należy utworzyć zestaw wyników UNION do tabeli pochodnej; Dałem muTEMP
jako alias
Nie testowałem powyższego zapytania, ale mam nadzieję, że zadziała. Daj mi znać o swoich ustaleniach.