MySQL 可使用 ORDER BY RAND(N);
例如:
SELECT * FROM TABLE ORDER BY RAND(1);
那SELECT 出來會是固定的亂數排列...
所以就把 RAND(N) 的 N 改掉~ 就會是另一種亂數排列...
只是排序的效能上好像不是很優~ 不過還是可以參考看看~~
不然也是可以從 PHP 也是可以指定 亂數種子 如:
srand(1);
$a = array(1,2,3,4,5,6,7,8,9,10);
shuffle($a);
也是會固定一定的排序
只是資料量大時,也是會有效能上的問題,就參考看看吧..^^
您的要求真特別......
如果要每個使用者每次使用時都即時做亂數排序,對於系統資源以及反應時間來說都太傷了吧?如果資料量成長,還會讓系統速度越來越慢哪。
我的想法是與其真的即時做亂數排序,不如預先做:
理論上pk應該不會太佔空間,所以放temporary table應該還好。mysql上temporary table是用memory database engine來做,需要考慮記憶體空間使用的issue。如果不想這樣佔用記憶體,說不定拿一般的myisam來做也可以。
但是用這個方法有一些限制,更新temporary table時還是會影響到使用者的操作,所以最好是在人少的時候更新,或是使用一些更新的rule,讓更新時候不會用到更新的資料表。(例如排定每個temporary的更新時間,程式可以設定好不會在更新時間用到更新的資料表等)另外這個方法恐怕不適用在你資料頻繁更新,而又要求亂數排序必須時常趕上資料更新的狀況。(這樣用這個方法恐怕沒解)