最佳解答(發問者自選)
5人
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);
也是會固定一定的排序
只是資料量大時,也是會有效能上的問題,就參考看看吧..^^
參考資料:php.net & mysql.com
亂數產生排序,但有需做分頁
7人
您的要求真特別......
如果要每個使用者每次使用時都即時做亂數排序,對於系統資源以及反應時間來說都太傷了吧?如果資料量成長,還會讓系統速度越來越慢哪。
我的想法是與其真的即時做亂數排序,不如預先做:
1. 建立數個temporary table,裡面用亂數把你要亂數排序的資料表的pk打散存放
2. 需要亂數排序的場合,隨機選一個temporary table name存在session裡面,然後用join的方式來讓選出來的資料是依照這個temporary table的順序
3. 定期更新這幾個temporary table來反應資料的更新狀況,系統重啟的時候也需要重新產生這幾個表。
理論上pk應該不會太佔空間,所以放temporary table應該還好。mysql上temporary table是用memory database engine來做,需要考慮記憶體空間使用的issue。如果不想這樣佔用記憶體,說不定拿一般的myisam來做也可以。
但是用這個方法有一些限制,更新temporary table時還是會影響到使用者的操作,所以最好是在人少的時候更新,或是使用一些更新的rule,讓更新時候不會用到更新的資料表。(例如排定每個temporary的更新時間,程式可以設定好不會在更新時間用到更新的資料表等)另外這個方法恐怕不適用在你資料頻繁更新,而又要求亂數排序必須時常趕上資料更新的狀況。(這樣用這個方法恐怕沒解)
如果要每個使用者每次使用時都即時做亂數排序,對於系統資源以及反應時間來說都太傷了吧?如果資料量成長,還會讓系統速度越來越慢哪。
我的想法是與其真的即時做亂數排序,不如預先做:
1. 建立數個temporary table,裡面用亂數把你要亂數排序的資料表的pk打散存放
2. 需要亂數排序的場合,隨機選一個temporary table name存在session裡面,然後用join的方式來讓選出來的資料是依照這個temporary table的順序
3. 定期更新這幾個temporary table來反應資料的更新狀況,系統重啟的時候也需要重新產生這幾個表。
理論上pk應該不會太佔空間,所以放temporary table應該還好。mysql上temporary table是用memory database engine來做,需要考慮記憶體空間使用的issue。如果不想這樣佔用記憶體,說不定拿一般的myisam來做也可以。
但是用這個方法有一些限制,更新temporary table時還是會影響到使用者的操作,所以最好是在人少的時候更新,或是使用一些更新的rule,讓更新時候不會用到更新的資料表。(例如排定每個temporary的更新時間,程式可以設定好不會在更新時間用到更新的資料表等)另外這個方法恐怕不適用在你資料頻繁更新,而又要求亂數排序必須時常趕上資料更新的狀況。(這樣用這個方法恐怕沒解)
回應 :
請填寫您的回應,長度限為1,000個字,回應不計點數,也不限使用次數
▼ ADVERTISEMENT ▼
-
‧
-
‧
-
‧
相關問答
- MYSQL 亂碼問題
- MySQL的備份策略?
- 如何開發夠安全的PHP網頁?
- Qt 的 MySQL 驅動程式
- Firefox 分頁問題...
- 分享一個實用的MySQL GUI管理工具 - Navicat
- solar - Framework for PHP 5
- 在mysql怎麼做出bopomofo的排序、定序?
- 昇陽併購MySQL後,對開放源始碼會什麼影響?
- 學 .net 好還是學php好呢?
- 請問在Gentoo Linux上要怎麼加上PHP的ctype模組?
- mysql的表类型有myisam,innodb,bdb,如何查看一个表是属于何种类型?
- 請問那一套PHP RSS parser比較好用?
- MySQL將推出有技術支援的企業版本,大家會考慮付費使用嗎?
- 不同預設閘道(Getway)時,檔案無法以php上傳
- 用「iProber探針」查詢PHP主機資訊 (租虛擬主機必備)
- 請推薦適合使用在PHP的Ajax框架?
- 如何調整firefox書籤資料夾的長度?
- extjs: Grid pagging & ASP.Net 資料分頁技術
- Zend Framework 1.5 正式推出









