2013-11-15 103 views
0

我有一個擁有超過一百萬條記錄的數據庫。我試圖以隨機順序獲取記錄。數據庫中充滿了指向圖像的鏈接,每個圖像都有唯一的編號。所以我應該能夠爲圖片上的下一個和上一個按鈕重新創建相同的「隨機」順序?重新生成「隨機」MySQL查詢

有沒有辦法提出查詢並將其保存在cookie或會話中,並重新使用它來重新生成我的隨機順序?
總體而言,它是有效的,因爲我不希望加載時間過高?

任何建議是真棒。

+0

您是否需要在prev,next操作之後恢復「隨機」圖像?你需要隨機爲每個用戶?有可能有重複?你需要真正的隨機或只是不尋常的秩序? – sectus

+0

你也可以在你的SQL查詢結果數組上使用'shuffle()'。 http://php.net/manual/en/function.shuffle.php –

+0

@sectus,這裏是對這些問題的回答: 1)我只想按照畫廊上展示的相同順序穿過它們2)不,它可能是一樣的,但我想改變他們點擊「再次洗牌」的順序3)沒有重複4)不尋常的順序是完美的 –

回答

4

最簡單的方法是,將其放入數據庫的另一列中,正確編制索引並給它一個隨機整數。那麼你可以在這個表上ORDER,並保持穩定。這將使所有用戶具有相同的,但隨機的順序。

編輯:如果你希望每個用戶都有自己的序列,這也是很簡單的,因爲阿爾瑪待辦事項說:

SELECT * FROM records ORDER BY RAND(17) 

將始終具有相同的排序(只要你不改變數據庫)和

SELECT * FROM records ORDER BY RAND(2308) 

但它不會很快。

我能想到的唯一選擇會使用很多空間:當您爲用戶計算序列時,將其存儲在表中。這需要每個用戶有兩百萬行的兩列表。

+0

這將工作,但每個用戶將具有相同的順序,並且每次用戶點擊「隨機播放」時都無法更改順序 –

+1

這不是您問題的一部分,我們也不是傳感器。編輯。 – Amadan

1

根據MySQL手冊頁面,您可以爲RAND()函數指定參數,所以它會返回隨機的,但重複的序列:

如果指定了一個常量整數參數n,則它被用作種子 值,這會產生可重複的列值序列。

這意味着,您可以隨機訂購,但您的prev-next頁面仍然具有相同的順序。

+0

Rand()完美地工作,但是當你有100萬條記錄要經過時,它真的很慢! –