在我的一個在PHP應用程序中有一個比賽部分。它包含多個選項10個問題,每個都有4個選項。PHP大賽邏輯
用戶填寫我保存的答案作爲DB逗號分隔值表格後。像如下:
user | answer
-------------------------------------
112 | 1,7,8,9,8,5,2,3,6,7,9,6
我得到了接聽鍵一樣使用的填充接聽鍵..
什麼是評估用戶的輸入,並找出得分最高的用戶的最佳方法的邏輯?
在我的一個在PHP應用程序中有一個比賽部分。它包含多個選項10個問題,每個都有4個選項。PHP大賽邏輯
用戶填寫我保存的答案作爲DB逗號分隔值表格後。像如下:
user | answer
-------------------------------------
112 | 1,7,8,9,8,5,2,3,6,7,9,6
我得到了接聽鍵一樣使用的填充接聽鍵..
什麼是評估用戶的輸入,並找出得分最高的用戶的最佳方法的邏輯?
正如評論所說,這不是存儲數據的最佳方式,但我評價是這樣的:
$query = mysql_query("select * from `table` where 1",CONNECTION_IDENTIFIER) or die("die message");
$answer_key = array(answer1,answer2,etc);
$high_score = 0;
$high_scorer= "";
while($r=mysql_fetch_array($query)){
$users_answers = explode(',',$r['answer']);
$user_score = 0;
for($i=0;$i<10;$i++){
if ($answer_key[$i]==$users_answers[$i]){
$user_score++;
}
}
if ($user_score > $high_score){
$high_score = $user_score;
$high_scorer = $r['user'];
}
}
echo "High scorer is $high_scorer with $high_score points";
感謝您的回覆,這似乎是我正在尋找...謝謝..我會通過它。 。順便說一句如何增加這個功能的執行時間..在越來越多的答案的情況下? – ramesh 2011-12-19 22:00:27
該解決方案應該適用於多達數千用戶。如果你期望的不僅僅是你想要採取不同的方法......但老實說,給定比你只有10,000個可能的組合(10^4),你不會有幾個人參加測試的機會一旦你有50K +的受訪者是非常小的......也許在上面添加一些代碼來檢查是否有人已經把它(比較答案關鍵字字符串和用戶鍵字符串...很可能有一些人會匹配,一旦你有很多的受訪者)...如果有匹配,則跳過循環 – 2011-12-19 22:17:31
另外,如果這不起作用,您還可以在答案表中添加一列,並在添加答案時存儲用戶的分數(一旦它們提交了答案,它就會運行比較函數並存儲他們的條目,如: 用戶:1322,答案:1,4,7,2,5,1,5,5,2,8,得分:8 然後使用mysql的「ORDER BY」或MAX()函數來獲得最好的分數......這將允許您在整個調查過程中處理分數,而不是一次性處理分數。 – 2011-12-19 22:20:39
如果你有得分這樣的答案:
$ answersRating = array(1 => 0,2 => 1,3 => 3,4 => 2,...)選擇答案1時,他得到0分,2 => 1分,3 => 3點等。你可以做這樣的事情:
$score = array_sum(array_intersect_key($answersRating, array_flip(explode(',', $userAnswersStringFromDB))));
我想你應該構建您的數據庫是這樣的: 注意:這是最低限度的,你當然會增加額外的字段,如姓名,說明的問題等
answers | id, user_id, question_id, answer
questions | id, contest_id, correct_answer
user | id, name
然後你可以得到一切與查詢。
最高分:
SELECT u.name,count(*) as Score FROM user u, answers a, questions q WHERE u.id=a.user_id and q.id = a.question_id and q.correct_answer=a.answer WHERE q.contest_id=XXX ORDER BY Score
嗨,感謝您的回覆,並且......我懷疑......你意思是答案表中的答案行是逗號分隔的值,如(1,4,2,4,1,3,4)。請幫忙 – ramesh 2012-01-06 05:43:18
最好的辦法是不存儲數據的方式... – ceejayoz 2011-12-19 21:36:16
逗號分隔值......在數據庫中?請不要在自己的腳下開槍......使用多個鏈接表(根據[關係數據庫模型](http://en.wikipedia.org/wiki/Relational_database))。 – qJake 2011-12-19 21:38:14
+1 SpikeX。在單個列中存儲這樣的多個值甚至不是1NF。如果你想改變問題的數量,你最終會面臨許多令人頭痛的問題。 – 2011-12-19 21:39:30