Database uitlezen, ingegeven waarde erbij optellen en delen door 2
Ik heb een vragenlijst met 15 antwoorden.
De antwoorden zijn waarden en liggen tussen 0 en 10.
Per vraag wil ik vergelijken met eerder gegeven antwoorden in de database. (Wel aangemaakt, maar weet niet of deze klopt)
In mijn database staat dus een waarde per vraag.
Ik tel de waarde uit de database op bij het zojuist gegeven antwoord. Delen door 2 is gemiddelde.
Dit gemiddelde moet nu worden opgeslagen als nieuwe waarde in de database. En zo voor alle vragen.
Tot de volgende gebruiker de vragenlijst invult.
Hoe kan ik dit het beste opbouwen?
En wat gebeurt er als meerdere gebruikers de database tegelijk willen benaderen?
3 + 6 = 9
9 / 2 = 4,5
4,5 + 8 = 12,5
12,5 / 2 = 6,25
Zie het verschil met het werkelijke gemiddelde
3 + 6 + 8 = 17
17 / 3 = 5,66666
Je kunt dan beter het antwoord optellen bij het antwoord uit de DB en ook opslaan hoeveel antwoorden het waren.
Dus was het 1e getal 3 en is er nu 6 geantwoord dan sla je als waarde op in DB 9 en bij antwoorden 2.
Komt er nu als antwoord 8 bij dan sla je als waarde 17 op en bij antwoorden 3. Dan bereken je iig altijd het juiste gemiddelde.
query zou zoiets kunnen zijn:
UPDATE tabelnaam SET waarde=waarde+nieuweinput, antwoorden=antwoorden+1 WHERE vraag=x
zelf nog aanpassen naar de juiste benamingen etc.
Gewijzigd op 07/09/2012 13:31:58 door Sander Z
Oke, het wordt dus nog ingewikkelder.
Ik moet weten hoeveel gebruikers er zijn (geweest).
Wat iedereen heeft ingevuld per vraag.
En dan pas het gemiddelde uitrekenen.
Om zo te laten zien hoe de gebruiker van het moment het doet t.o.v. eerdere gebruikers.
Ja. Ik weet niet om hoeveel vragen en gebruikers het gaat, maar je moet eigenlijk gewoon het antwoord van iedereen apart opslaan.
Dan verder neem ik aan dat alle vragen neerkomen op hetzelfde thema, want als dat ook niet het geval is is het ook onzinnig om een gemiddelde te nemen.
Maar als het een gradatie is van 0 tot 10, waar zit dan het juiste antwoord? Ik neem aan dat het meest correcte antwoord altijd bij 10 zit.
Dat gezegd ...
Je kan het gemiddelde automatisch laten uitrekenen door je database met de AVG() functie (heb ik zelfs overigens nooit gebruikt). Google op "mysql get average" (neem aan dat je mysql gebruikt)
Geef wat voorbeelden van vragen en geef je database tabel structuur.
Gewijzigd op 07/09/2012 13:44:43 door Flip --
Gebruiker 1 beoordeeld vraag 1 met een 7
Gebruiker 2 beoordeeld vraag 1 met een 6
Dat ziet gebruiker 2 dus dat hij lager scoort dan eerdere gebruiker, want 6 is lager dan 6.5
Ja mysql. Maar compleet nieuw hiermee, dus vlieg van de ene tut naar de andere.
Gewijzigd op 07/09/2012 13:49:15 door Flip --
Ok, scoren is niet het juiste woord. Maar zijn beoordeling ligt lager dan het gemiddelde.
Optioneel kan je ook nog een tabel voor vragen (wel aan te raden). Maar als het er maar een paar zijn kan je dit ook in je php zetten (zodat je broncode moet gaan aanpassen als je vragen wilt aanpassen)
table users:
ID, Name, e-mail, password <-- of wat je ook belangrijk vind
table answers:
ID, UserID, QuestionID, Rating
De rating is de beoordeling dan.
Gemiddelde beoordeling voor vraag 4:
SELECT AVG(Rating) FROM answers WHERE QuestionID = 4
Gemiddelde beoordeling voor alle vragen van gebruiker nummer 6
SELECT AVG(Rating) FROM answers WHERE UserID = 4
Beoordeling van gebruiker nummer 6 over vraag 4:
SELECT Rating FROM answers WHERE QuestionID = 4 AND UserID = 6
Gemiddelde beoordeling van alle vragen door alle gebruikers:
SELECT AVG(Rating) FROM answers
Gewijzigd op 07/09/2012 14:00:21 door Flip --
Er zijn geen vaste gebruikers. Iedere nieuwe bezoeker van de site krijgt een plek in de database.
Mijn tabel ziet er denk ik zo uit:
ID, Rating, Vr01, Vr02, Vr03, Vr04, Vr05, Vr06, Vr07, Vr08, Vr09, Vr10, Vr11, Vr12, Vr13, Vr14, Vr15
ID telt dus op elke keer als er een gebruiker nieuw is op de site.
Rating is gemiddelde van Vr01 t/m Vr15.
Vr01 t/m Vr15 bevat de losse ingegeven waarden.
Tijdens het ingeven van alle vragen moeten dus wel alle antwoorden bij het juiste ID komen te staan.
Of moet ik een IP en een DATE erbij zetten?
Yup bij mij zijn er ook geen vaste gebruikers, want iedere gebruiker krijgt een nieuwe rij in de tabel users.
"Mijn tabel ziet er denk ik zo uit:
ID, Rating, Vr01, Vr02, Vr03, Vr04, Vr05, Vr06, Vr07, Vr08, Vr09, Vr10, Vr11, Vr12, Vr13, Vr14, Vr15 "
Verkeerd database ontwerp, een opsomming zoals deze moet in rijen, niet in kolommen.
Volgens mij valt dit onder "database normaliseren" <-- kan je in google intypen voor meer info.
IP & DATE heeft verder niets met je probleem te maken.
Gewijzigd op 07/09/2012 14:34:03 door Flip --
http://ramonrs.nl/tabel.png
ID Vr01 Vr02 Vr03 Vr04 Vr05 Vr06 Vr07 Vr08 Vr09 Vr10 Vr11 Vr12 Vr13 Vr14 Vr15
1 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
2 1 2 3 4 5 6 7 8 9 10 9 8 7 6 5
3 10 9 8 7 6 1 2 3 4 5 6 7 8 9 5
Hoeveel ID's zijn er?
Wat is gemiddelde van Vr01: dus 6 + 1 + 10 = 17 / 3
En zo ook voor Vr02 t/m Vr15
Daarna vult de nieuwste gebruiker (ID 4) zijn waarden in.
Deze zullen aan de database moeten worden toegevoegd.
Dit lukt mbv onderstaande denk ik:
$nieuw = IDtotaal + 1;
$commando="INSERT INTO `Verdienmodel` VALUES ('$nieuw','10','9','8','7','6','1','2','3','4','5','6','7','8','9','5')";
mysql_query($commando);
Print "Data met succes toegevoegd.";