Database uitlezen, ingegeven waarde erbij optellen en delen door 2

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ramon RS

Ramon RS

07/09/2012 13:16:05
Quote Anchor link
Hallo,

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?
 
PHP hulp

PHP hulp

19/04/2024 08:53:54
 
Sander Z

Sander Z

07/09/2012 13:26:43
Quote Anchor link
Volgens mij klopt het niet hoe jij je gemiddelde wilt berekenen.
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
 
Ramon RS

Ramon RS

07/09/2012 13:34:24
Quote Anchor link
Thnx.
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.
 
Sander Z

Sander Z

07/09/2012 13:38:53
Quote Anchor link
Ja. Ik weet niet om hoeveel vragen en gebruikers het gaat, maar je moet eigenlijk gewoon het antwoord van iedereen apart opslaan.
 
Flip --

Flip --

07/09/2012 13:42:16
Quote Anchor link
Ik neem aan dat 0 tot 10 een gradatie is van hoe goed te vraag is beantwoord. Anders zou het namelijk onzinnig zijn om een gemiddelde te nemen.

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 --
 
Ramon RS

Ramon RS

07/09/2012 13:47:19
Quote Anchor link
Er is geen goed of fout bij het antwoord. Het gaat hier om een beoordeling.
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.
 
Flip --

Flip --

07/09/2012 13:49:00
Quote Anchor link
Hoe kan iemand lager scoren als het een mening is ?
Gewijzigd op 07/09/2012 13:49:15 door Flip --
 
Ramon RS

Ramon RS

07/09/2012 13:53:46
Quote Anchor link
Ok, scoren is niet het juiste woord. Maar zijn beoordeling ligt lager dan het gemiddelde.
 
Flip --

Flip --

07/09/2012 13:58:14
Quote Anchor link
maak een tabel voor gebruikers en een tabel voor antwoorden.
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 --
 
Ramon RS

Ramon RS

07/09/2012 14:28:20
Quote Anchor link
Lastig.
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?
 
Flip --

Flip --

07/09/2012 14:31:17
Quote Anchor link
"Er zijn geen vaste gebruikers. Iedere nieuwe bezoeker van de site krijgt een plek in de database."
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 --
 
Ramon RS

Ramon RS

10/09/2012 11:53:19
Quote Anchor link
Dit is mijn tabel
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.";
 
- SanThe -

- SanThe -

10/09/2012 12:32:09
Quote Anchor link
@Ramon: Luister naar de tips in de antwoorden.
http://www.phphulp.nl/php/tutorial/overig/normaliseren/150/
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.