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