2013-02-26 32 views
0

我有2個表格,其中一個定義測驗的問題和另一個測驗問題的答案表。從兩個表格制定出測驗分數

第一個表具有這樣的結構如下

questionID attribute value 
1   title  some textQ1 
1   option1 some text 
1   option2 some text 
1   option3 some text 
1   correct 2 
2   title  some textQ2 
2   option1 some text 
2   option2 some text 
2   option3 some text 
2   correct 1,2 

第二個表具有從用戶

userID questionID value 
user1 1   3 
user2 1   2 
user3 1   2 
user3 2   1 
user3 2   2 
user2 2   3 

響應然後我想是能夠得到的分數爲每個用戶,例如每個正確答案1分。

因此,該數據集看起來像

user score 
user3 3 
user2 1 
user1 0 

這可能在1個查詢則允許多個問題條目,也多用戶呢?

非常感謝

+0

用戶3回答相同的問題兩次。這不是欺騙嗎?或者你是否必須說「1和2」才能獲得分數? – Strawberry 2013-02-26 11:51:20

回答

0

難道這是你正在尋找?

SQL DEMO

select r.userid, 
sum(case when find_in_set(r.value, q.value) then 1 
    else 0 
    end) as score 
from responses r 
left join questions q 
on r.questionid = q.questionid 
where q.attribute = 'correct' 
group by r.userid 
order by score desc 
; 

| USERID | SCORE | 
------------------ 
| user3 |  3 | 
| user2 |  1 | 
| user1 |  0 | 
+0

@Dave請看看這段代碼。每當用戶的回答正確或在正確的池中時,我使用'CASE WHEN'內的'Find_In_Set'來返回1。 – bonCodigo 2013-02-26 12:12:37

+0

太棒了,非常感謝你!有很多我不知道的SQL! – Dave 2013-02-27 13:07:59

+0

@Dave很高興你得到它的工作。是的,SQL很有趣:) – bonCodigo 2013-02-27 13:09:13