Das ist Ihre Lösung:
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();
Die Änderungen, die ich vorgenommen habe, sind:
- Jede Ihrer Abfragen, die Teil von UNION sind, sollte in eckige Klammern gesetzt werden (fett dargestellt für die erste Abfrage; die zweite ist bereits eingeschlossen)
- den Alias
profile3
entfernt für Ihre 2. Anfrage - für den letzten
ORDER BY RAND()
, müssen Sie die UNION-Ergebnismenge in einer abgeleiteten Tabelle erstellen; Ich habe ihmTEMP
gegeben als Alias
Ich habe die obige Abfrage nicht getestet, aber ich hoffe, sie sollte funktionieren. Teilen Sie mir Ihre Erkenntnisse mit.