[英]ORDER BY RAND() not working within a UNION
我在UNION中對ORDER BY RAND()有一些問題。 在UNION內的各個查詢中似乎並沒有隨機排序。
我只想對子查詢進行排序,而不必一次對整個查詢進行排序,因為該順序需要是Subquery 1> subquery2> subquery3。
我為MySQL嘗試了其他一些隨機函數,例如NEWID()和UUID(),但它們似乎也不起作用。
我正在使用WordPress獲得結果。
SELECT *
FROM (
(SELECT act.wordpress_id,
act.title,
act.main_image,
loc.id,
"activities" AS type,
loc.town,
loc.village
FROM tha_wc_activity act
INNER JOIN tha_wc_location loc
ON act.location_id = loc.id
WHERE
act.active = 1 AND
act.visible_in_activities_overview = 1 AND
loc.id = 1
ORDER BY RAND()
)
UNION
(SELECT act.wordpress_id,
act.title,
act.main_image,
loc.id,
"activities" AS type,
loc.town,
loc.village
FROM tha_wc_activity act
INNER JOIN tha_wc_location loc
ON act.location_id = loc.id
WHERE
act.active = 1 AND
act.visible_in_activities_overview = 1 AND
loc.village = "villageName"
ORDER BY RAND()
)
UNION
(SELECT act.wordpress_id,
act.title,
act.main_image,
loc.id,
"activities" AS type,
loc.town,
loc.village
FROM tha_wc_activity act
INNER JOIN tha_wc_location loc
ON act.location_id = loc.id
WHERE
act.active = 1 AND
act.visible_in_activities_overview = 1 AND
loc.town = "townName"
ORDER BY RAND()
)
) AS act
WHERE act.wordpress_id != 1
LIMIT 0, 15)
更新:感謝Gordon Linoff,我發現我必須限制單獨的子查詢,否則它將無法獲得有序的結果
我不太確定您的問題是什么。 您在子查詢中使用order by rand()
,但是隨后選擇了所有結果。 獲取所有行就是所有行,無論它們的順序如何。
然后,您正在使用union
刪除重復並具有其他邏輯。
大概,您需要這樣的東西:
select *
from (<subquery 1>
union
<subquery 2>
. . .
) t
where . . .
order by rand()
limit 15;
除非您使用limit
,否則無需訂購子查詢。
請注意,您可能要使用union all
而不要使用union
-除非您明確希望引起刪除重復項的開銷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.