2017-10-20 77 views
0

我必須爲學校做一個測驗,並且將所有的問題都存儲在一個MySQL表中(使用數據庫是項目的一個需求。)有什麼辦法嗎?可以隨機化表格記錄的順序,這樣我就可以在必要時輕鬆地將它們拖入java程序中,只需從頂部開始並向下工作,而不必隨意選擇一個隨機的副本並冒着重複的風險?我如何隨機化MySQL表的順序

+0

當您得到結果時,只需對數組進行洗牌就更簡單了。後端是什麼? – wast

+0

是的,我認爲,但我有更多的問題在表中比在陣列中的位置。我已經解決了如何隨機排列問題出現的順序,但是當我將它們輸入到數組中時,它始終只是表格頂部的前幾個問題。 – Darragh

+0

嘗試ORDER BY RAND()? – wast

回答

0

我可以看到多種方式來處理您的問題,但需要更多的用例信息來猜測它們的可行性。

第一個想到的是將已經選擇的問題與客戶端ID一起寫入另一個表中。所以當你選擇下一個問題時,你可以簡單地排除那些已經在另一個表中的問題。

要對錶格「重新排序」,最簡單的方法是簡單地添加一個排序列。

我的表看起來像這樣:

CREATE TABLE `questions` (
    `questionId` int(11) NOT NULL AUTO_INCREMENT, 
    `question` varchar(1000) NOT NULL, 
    `sort` varchar(36) DEFAULT '', 
    PRIMARY KEY (`questionId`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

sort列將包含的UUID,所以很可能不會衝突。

現在,更改順序,我只是更新與新的那些的UUID:

UPDATE questions SET sort = uuid() ORDER BY rand(); 

要選擇一些問題,只需使用該列命令的結果。當你有很多的問題

SELECT questionId, question FROM questions ORDER BY sort; 

sort列的index可能是有用的,說成千上萬。我想它會很快沒有一個。

而不是UUID您也可以使用一些較少耗費空間的數據,它只需要是相對隨機的。