我正在嘗試UNION兩個包含ORDER BY的查詢。 正如我發現的那樣,您不能通過作爲UNION一部分的查詢進行排序。 我只是不知道如何做這個查詢然後。讓我解釋我想要做的事情。包含ORDER BY的MySQL UNION 2查詢
- 我想選擇40個最近期的輪廓,然後從列表中選擇一組隨機的20,然後我想工會與:
- 選擇40隨機配置文件,其中配置文件不落於在第一組中查詢原始的40個最近的配置文件
- 隨機地命令整個60個記錄集。
我知道使用RAND()函數
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) as profile3
ORDER BY RAND()
UPDATE的效率後果的:這是基於以下阿沛的幫助(感謝阿沛)解決方案:
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 * FROM
(
SELECT profileId
FROM profile profile4
WHERE profile4.profilePublishDate <= Now()
ORDER BY profile4.profilePublishDate DESC
LIMIT 0,40
) AS temp2
)
ORDER BY RAND()
LIMIT 0,40
)
) TEMP
ORDER BY RAND();
謝謝 - 您的解決方案解決了我的問題,但出現了一個新錯誤(此版本的MySQL尚不支持'LIMIT&IN/ALL/ANY/SOME子查詢'),我也通過另一個選擇解決了這個問題,並在我的原始文章中發佈了上面的完整查詢。感謝您解決這個問題。 – Cheeky
@ Cheeky:是的,這是解決這個問題的方法,它具有MySQL提出的限制:) –