Đây là giải pháp của bạn:
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();
Những thay đổi mà tôi đã thực hiện là:
- mỗi truy vấn của bạn là một phần của UNION phải được đặt trong dấu ngoặc vuông (được in đậm cho truy vấn đầu tiên; truy vấn thứ hai đã được mã hóa)
- đã xoá bí danh
profile3
cho truy vấn thứ hai của bạn - cho
ORDER BY RAND()
cuối cùng , bạn phải tạo tập kết quả UNION cho một bảng dẫn xuất; Tôi đã cung cấp cho nóTEMP
làm bí danh
Tôi chưa thử nghiệm truy vấn trên nhưng tôi hy vọng nó sẽ hoạt động. Hãy cho tôi biết những phát hiện của bạn.