Ini adalah solusi Anda:
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();
Perubahan yang saya lakukan adalah:
- setiap kueri Anda yang merupakan bagian dari UNION harus terbungkus dalam tanda kurung (ditampilkan dalam huruf tebal untuk kueri pertama; yang kedua sudah terbungkus)
- menghapus alias
profile3
untuk kueri kedua Anda - untuk
ORDER BY RAND()
terakhir , Anda harus membuat kumpulan hasil UNION ke tabel turunan; Saya telah memberikannyaTEMP
sebagai alias
Saya belum menguji kueri di atas tetapi saya harap ini akan berhasil. Beri tahu saya temuan Anda.