webForumDet fria alternativet

Rätta Quiz

Databaser & SQLur Databashanterare & SQL

4 svar · 443 visningar · startad av MickeA.com

Medlem sedan feb. 20034 441 inlägg
Frågan#1

Hej,

Har gjort ett quiz som innehåller x antal frågor med y antal svar på varje fråga.
Nu försöker jag skriva ihop en sql-fråga som ska ta reda på hur många som hittills haft alla rätt på ett quiz.

Min databas (MySQL 5.0) ser ut såhär:

[i]quiz - Varje unikt Quiz[/i]
quiz_id  	int(11)
quiz_unique 	varchar(100)
quiz_name 	varchar(100)
quiz_desc 	text
quiz_datetime 	int(15)
quiz_active 	int(1)

[i]quiz_question - Alla frågor[/i]
ques_id  	int(11)
ques_parent 	int(11)
ques_topic 	varchar(100)

[i]quiz_answer - Alla svar[/i]
answ_id  	int(11)
answ_parent 	int(11)
answ_topic 	varchar(100)
answ_correct	int(1)

[i]quiz_user - Användare som genomgått ett quiz[/i]
user_id  	int(11)
user_quiz_id 	int(11)
user_login 	varchar(50)
user_email 	varchar(50)

[i]quiz_user_answer - Alla svar från resp. användare[/i]
answ_user_id  	int(11)
answ_quiz_id 	int(11)
answ_ques_id 	int(11)
answ_answ_id 	int(11)

I tabellen quiz_answer så finns kolumnen answ_correct som har värde 2 om det är det korrekta svaret.

Jag försökte med följande:

SELECT 
user_login, user_email, user_datetime 
FROM quiz_user 
WHERE user_quiz_id = <quiz_id>
AND (
	SELECT 
	answ_user_id 
	FROM quiz_user_answer 
	WHERE answ_answ_id = (
		SELECT 
		answ_id 
		FROM quiz_answer 
		WHERE answ_correct = 2 
		AND answ_parent = (
			SELECT 
			ques_id
			FROM quiz_question
			WHERE ques_parent = <quiz_id>
			LIMIT 1
		)
	)
)

Men det fungerar inte alls, det resulterar i att alla användare som svarat minst 1 rätt kommer med.
Jag vill få ut alla användare som har ALLA rätt där <quiz_id> t.ex. är 1.

Vore tacksam av lite hjälp med det här.

Medlem sedan dec. 20025 483 inlägg
#2
select u.user_login
     , u.user_email
     , u.user_datetime
  from quiz_user u
 where u.user_quiz_id = <quiz-id> and
   not exists ( select 1
                  from quiz_answer a
                inner
                  join quiz_user_answer ua
                    on a.answ_id = ua.answ_answ_id
                inner
                  join quiz_question q
                    on a.answ_parent = q.quis_id
                 where q.ques_parent = u.user_quiz_id
                   and a.answ_correct <> 2
                   and ua.answ_user_id = u.user_id )
Medlem sedan feb. 20034 441 inlägg
#3

Tja,

Tack!
Ett litet problem dock, koden fungerar utmärkt om en användare går testet och har alla rätt. Men om nästa svarar fel, så visar ovanstående att det är 0 personer med alla rätt.

Så något ska ändras, men vad?

Medlem sedan dec. 20025 483 inlägg
#4

Ett till litet villkor som skall till :)

Inlägget är redigerat.

Medlem sedan feb. 20034 441 inlägg
#5

Peter S skrev:

Ett till litet villkor som skall till :)

Inlägget är redigerat.

Grymt! Tack! :)

139 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)