Това е вашето решение:
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();
Промените, които направих, са:
- всяка от вашите заявки, които са част от UNION, трябва да бъде затворена в скоби (показани с удебелен шрифт за първата заявка; втората вече е затворена)
- премахна псевдонима
profile3
за вашата 2-ра заявка - за крайния
ORDER BY RAND()
, трябва да създадете UNION набора от резултати към извлечена таблица; Дал съм муTEMP
като псевдоним
Не съм тествал горната заявка, но се надявам да работи. Кажете ми вашите констатации.