Toto je vaše řešení:
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();
Změny, které jsem provedl, jsou:
- každý z vašich dotazů, které jsou součástí UNION, by měl být uzavřen v hranatých závorkách (u prvního dotazu zobrazeno tučně, u druhého je již uzavřeno)
- odstranil alias
profile3
pro váš 2. dotaz - pro finální
ORDER BY RAND()
, musíte vytvořit sadu výsledků UNION k odvozené tabulce; Dal jsem muTEMP
jako alias
Výše uvedený dotaz jsem netestoval, ale doufám, že by měl fungovat. Dejte mi vědět o svých zjištěních.