簡體   English   中英

ORDER BY RAND()在UNION中不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM