簡體   English   中英

隨機MySQL查詢? 還是將結果隨機化?

[英]Random MySQL Query? Or randomize a result?

因此,我想對MySQL數據庫進行查詢,但是,我希望結果是隨機的-也就是說,我不想每次都以相同的順序出現同一件事。 這是因為我將只列出查詢的前6個項目(在某些情況下為2個項目),並且希望數據庫的所有內容都有機會出現。

是否可以在MySQL中執行此操作,還是我必須使用PHP來執行此操作?

快速方法請嘗試以下操作:

SELECT  *
FROM    (
        SELECT  @cnt := COUNT(*) + 1,
                @lim := 10
        FROM    t_random
        ) vars
STRAIGHT_JOIN
        (
        SELECT  r.*,
                @lim := @lim - 1
        FROM    t_random r
        WHERE   (@cnt := @cnt - 1)
                AND RAND(20090301) < @lim / @cnt
        ) i

請參閱本文以獲取有關其工作原理的詳細說明:


一種更簡單(但很慢的方法)是使用ORDER BY RAND()

 SELECT *
 FROM yourtable
 ORDER BY RAND()
 LIMIT 6

手冊

...您可以按以下隨機順序檢索行:

 mysql> SELECT * FROM tbl_name ORDER BY RAND(); 

結合LIMIT的ORDER BY RAND()可用於從一組行中選擇隨機樣本:

 mysql> SELECT * FROM table1, table2 WHERE a=b AND c<d -> ORDER BY RAND() LIMIT 1000; 

RAND()並不是完美的隨機生成器。 這是一種根據需要生成隨機數的快速方法,該隨機數可在同一MySQL版本的平台之間移植。


如果您具有從1到n遞增且沒有任何間隙的唯一id字段,則可以通過選擇[1,n]中的六個隨機數並使用這些id提取六行來進一步提高性能。 這樣可以避免掃描整個表。

馬克·拜爾斯(Mark Byers)是對的,之前已經有人問過。

您想將隨機算法放在應用程序層與數據庫層之間。 在數據庫層(假設MySQL)會極大地影響性能。 在應用程序層執行此操作將涉及一些額外的編碼,但是您會發現它更加靈活,因為您可以更新算法以適合最新的業務需求,更不用說可以實現諸如緩存之類的優化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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