Ik ben momenteel een soort vragenspel aan het maken.
Voor iedere vraag zijn er meerdere antwoordmogelijkheden, waarvan er 1 juist is.
Per goed antwoord kunnen er punten verdeeld worden. Niet ieder antwoord is evenveel punten waar,
dus per antwoord wordt in de tabel bijgehouden of dit het juiste antwoord is (1) en hoeveel punten
het antwoord waard is.
Nu wordt er in de gebruikerstabel ook een apart veld bijgehouden met punten.
Want gebruikers kunnen ook nog op een andere manier punten halen (buiten het systeem om).
Zo zien de tabellen eruit:
tblUsers
lngUserID
lngU_Punten
tblAntwoorden
lngAntwoordID
lngA_VraagID
txtA_Antwoord
blnA_CorrectAntwoord
lngA_Punten
De antwoorden die door de gebruikers zijn gegeven worden in een koppeltabel bijgehouden:
tblDeelnemer_Vraag
lngDeelnemerVraagID
lngDV_UserID
lngDV_VraagID
lngDV_AntwoordID
Nu wil ik dus een ranglijst maken en de punten moeten dus bij elkaar worden opgeteld.
En dit moet dus als volgt gaan:
- Zoek alle goede antwoorden per gebruiker op en tel de punten bij elkaar op [dit werkt]
- Tel het totaal alle goede antwoorden op bij de punten die de gebruiker buiten het systeem om heeft gehaald (lngU_Punten)
Dat laatste krijg ik niet voor elkaar!
Ik krijg dus wel voor elkaar dat netjes alle goede antwoorden per gebruiker worden opgeteld.
Dit heb ik voor elkaar met de volgende query (wellicht kan het ook anders en sneller?):
Maar hoe krijg ik het nu voor elkaar dat lngU_Punten slechts 1x wordt opgeteld bij antwoordenTotaal?!
Voor iedere vraag zijn er meerdere antwoordmogelijkheden, waarvan er 1 juist is.
Per goed antwoord kunnen er punten verdeeld worden. Niet ieder antwoord is evenveel punten waar,
dus per antwoord wordt in de tabel bijgehouden of dit het juiste antwoord is (1) en hoeveel punten
het antwoord waard is.
Nu wordt er in de gebruikerstabel ook een apart veld bijgehouden met punten.
Want gebruikers kunnen ook nog op een andere manier punten halen (buiten het systeem om).
Zo zien de tabellen eruit:
tblUsers
lngUserID
lngU_Punten
tblAntwoorden
lngAntwoordID
lngA_VraagID
txtA_Antwoord
blnA_CorrectAntwoord
lngA_Punten
De antwoorden die door de gebruikers zijn gegeven worden in een koppeltabel bijgehouden:
tblDeelnemer_Vraag
lngDeelnemerVraagID
lngDV_UserID
lngDV_VraagID
lngDV_AntwoordID
Nu wil ik dus een ranglijst maken en de punten moeten dus bij elkaar worden opgeteld.
En dit moet dus als volgt gaan:
- Zoek alle goede antwoorden per gebruiker op en tel de punten bij elkaar op [dit werkt]
- Tel het totaal alle goede antwoorden op bij de punten die de gebruiker buiten het systeem om heeft gehaald (lngU_Punten)
Dat laatste krijg ik niet voor elkaar!
Ik krijg dus wel voor elkaar dat netjes alle goede antwoorden per gebruiker worden opgeteld.
Dit heb ik voor elkaar met de volgende query (wellicht kan het ook anders en sneller?):
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| $qry = "SELECT U.`txtU_Achternaam`, U.`lngU_Punten`, SUM(A.`lngA_Punten`) AS antwoordenTotaal FROM `tblUsers` U RIGHT JOIN `tblDeelnemer_Vraag` DV ON (DV.`lngDV_UserID` = U.`lngUserID`) RIGHT JOIN `tblAntwoorden` A ON (DV.`lngDV_AntwoordID` = A.`lngAntwoordID`) AND (A.`blnA_CorrectAntwoord` = 1) GROUP BY `lngUserID`'"; |
Maar hoe krijg ik het nu voor elkaar dat lngU_Punten slechts 1x wordt opgeteld bij antwoordenTotaal?!