我正在調查應用程序。我有一個SQL服務器數據庫,可容納多達3000個調查問題。 我給數據庫調用了一組10個問題。我必須確保這些問題都不會在最長的時間內重複。 我可以在這裏採取什麼最好的方法?編寫一個自定義的隨機算法或SQL服務器提供一些功能。來自sql server的隨機問題
回答
SELECT question_id
FROM questions
ORDER BY NEWID()
以隨機順序給出所有問題ID。存儲清單,然後按照你的方式工作。
沒有辦法確保重複之間最長的時間而不存儲訂單。你可以把它放在同一個表的另一列...
編輯:雅克先生的理念的變化:
怎麼樣一個名爲隨機列?隨機播放順序如下所示:
update questions set random = (
SELECT question_id
FROM questions
ORDER BY NEWID()
)
然後讓每一個新的問題是這樣的:
select * where random = 'prev_question_id';
那麼你也許可以在間隔洗牌的順序,每一個夜晚。
這不能確保問題不會在最長的時間內重複,而是按照OP。 – 2010-07-20 19:39:31
道歉;我提交了一些太快 - 希望現在更有意義 – 2010-07-20 19:40:56
你能簡單地跟蹤檢索到的最後一個問題ID嗎?然後總是用比前一個更高的id檢索下一個問題。如果沒有返回,請獲得第一/最低。
它不會很好地擴展,但它聽起來不像你需要擴展。
+1,這是最簡單的方法 – 2010-07-20 19:40:51
實際上,獲得一個隨機集合只是問題的一半。你真正想要的是一個新的隨機集,其中包含之前未被選中的條目。
以下是Jeff Atwood撰寫的一篇關於「洗牌」的文章,可能會幫助您:Shuffling和後續文章The Danger of Naïveté。
您可以根據問題本身的隨機生成器和頻率計數器的組合選擇問題。
如果您總是需要10個問題,請從一組具有最低使用頻率的問題開始,然後應用一個隨機數生成器從該組中挑選。增加這些問題的頻率。這些最近被問到的問題的頻率比其他人更高,所以在下一個階段忽略這些問題。
過程一直持續到您將所有問題提交到下一個頻率,並且整個池再次可用。
這有點像功課聲音。如果強調真的是確保問題是從未重複,直到絕對必要的,那麼我會建議添加一列或另一臺與TimesUsed場。
起初,您將擁有所有3000條記錄,TimesUsed爲0。搶十大
SELECT TOP 10 QUESTIONS WHERE TimesUsed = (SELECT MIN(TimesUsed) FROM Questions)
,並更新表中的這些問題的TimesUsed設置TimesUsed +1。
這是一個簡單的方法,而且你需要考慮,如果你沒有問題了10均勻divisble量,但我把它留給你:)
當然沒有任何如果你沒有死的話,那麼在他們全部被使用之前不要再重複一次。
- 1. 問題使用ROW_NUMBER()來獲得隨機記錄(SQL Server 2005中)
- 2. 隨機SQL更新問題
- 3. Microsoft SQL Server隨機行
- 4. sql server:更新表隨機
- 5. SQL Server:獨特+隨機行
- 6. 來自Dictionary的隨機值?
- 7. 排序來自SQL Server的數據的問題
- 8. NSLocalizedString隨機問題
- 9. Sql Server問題
- 10. SQL Server問題
- 11. SQL Server的問題
- 12. 來自jdbc的SQL Server 2008 R2登錄問題
- 13. 來自節點js應用程序的SQL Server連接問題
- 14. 來自.NET的SQL Server 2005連接問題
- 15. SQL Server選擇隨機且不是隨機的
- 16. 使用CTE的SQL Server隨機數
- 17. SQL Server 2014組中的隨機值
- 18. 隨機記錄SQL Server的條款
- 19. 帶有隨機值的SQL Server更新
- 20. 問題越來越到SQL Server 2008R2
- 21. SQL Server連接問題出來了
- 22. C#的問題隨機類
- 23. 連續的隨機問題?
- 24. Ç隨機的,有問題
- 25. 迭代來自SQL JPA本機查詢的結果的問題
- 26. 顯示隨機問題
- 27. 隨機OpenLdap超時問題
- 28. 隨機結果來自NSFetchedResultsController
- 29. 的SQL Server自動遞增外出時隨機
- 30. Android秀隨機問題
我認爲[這個問題當我看到「隨機」](http://stackoverflow.com/questions/2831088/how-to-generate-a-random-number/2831163#2831163) – 2010-07-20 19:35:25
爲了確保沒有的問題在最長的可能時間內重複,假設有3000個問題,那麼在再次顯示問題之前,最優的問題將是2999個問題的差距。如果你按照這個邏輯得出結論,你很快就會意識到問題將是第一次隨機問題,但之後會以相同的順序再次循環,這可能不是你說「隨機」時的意思。所以這些要求中的一個(或兩個)必須被削弱。這是什麼? – 2010-07-20 19:42:05
馬克, 是的,我會爲第一次傳球提出獨特的3000個問題,但是當我重複週期時,我不需要相同的順序,我需要他們進行洗牌和隨機化。 – SVI 2010-07-20 19:53:47