login  Naam:   Wachtwoord: 
Registreer je!
 Forum

vragenlijst database

Offline ramonrs - 10/09/2012 23:36
Avatar van ramonrsNieuw lid Hallo,

Ik heb een vragenlijst met 15 vragen.
Per vraag kan er een waarde gegeven worden van 0 t/m 10.

Zo ziet mijn database eruit
ID Vr01 Vr02 Vr03 Vr04 Vr05 Vr06 Vr07 Vr08 Vr09 Vr10 Vr11 Vr12 Vr13 Vr14 Vr15
1 6 7 8 9 5 4 2 5 3 2 3 2 3 5 6
2 7 8 6 7 8 8 10 4 6 7 8 9 6 4 4
3 7 5 6 7 7 8 6 5 6 7 6 8 5 6 7
..

Per bezoek aan de site
moet de database als volgt worden uitgelezen
- AVG Vr01 // De gemiddelde waarde die is gegeven bij vraag 1
- AVG Vr02 // enz.
...
- AVG Vr15

- AVG ID = 1 // De gemiddelde waarde van gebruiker 1
- AVG ID = 2 // enz.
..


Hoeveel ID's zijn er? Want de waarden van de huidige gebruiker van de site moeten worden toegevoegd aan de database.

Wat me niet lukt is de waardes uit te tabel uit te lezen zodat ik ook iets met het resultaat kan.


2 antwoorden

Gesponsorde links
Offline Stijn - 10/09/2012 23:49
Avatar van Stijn PHP expert Eerst en vooral is je database design fout. Wat als je een vraag toevoegt of verwijderd? Daarom is het best om te werken met drie tabellen.

- users (id, naam, ...)
- vragen (id, nr, omschrijving, ...)
- antwoorden (id, user_id, vraag_id, score)

Dan kan je de gemiddelde score van vraag met nr 3 als volgt opvragen:

  1. SELECT avg(a.score)
  2. FROM antwoorden AS a INNER JOIN vragen AS v ON(a.vraag_id = v.id)
  3. WHERE v.nr = 3


Je kan de SQL resultaten lezen met PHP.net: mysql_fetch_assoc of PHP.net: mysql_fetch_result.
Offline Martijn - 11/09/2012 09:39 (laatste wijziging 11/09/2012 09:47)
Avatar van Martijn Crew PHP Hoewel de manier van Stijn de manier is om te werken (in ieder geval de database structuur, eruit halen kan zoals Stijn zegt, maar je kunt ook andere resultaten er uit gaan halen dan), is er wel een antwoord op je vraag:

  1. SELECT AVG(kolomnaam) AS avg_kolomnaam FROM tabel


Dan je vraag over hoeveel id's, dit ben je erg fout aan het doen, maar is heel makkelijk op te lossen. Je gaat naar je database, die tabel en past dan die kolom naam naar het volgende:
id, INT, geen waarde
Vervolgens zet je AUTO_INCREMENT aan (soms met vinkje, soms met radiobutton, even zoeken dus).
Auto increment doet exact wat de naam zegt, het 'increment automatisch'm of simpel gezegd: Elke nieuwe regel zal de waarde van deze kolom 1 hoger zijn dan de volgende. Deze hoef je dus niet in je query te zetten! Gaat vanzelf.

Waarom zei ik dat wat je nu doet, erg fout is? Omdat het gewoonte is om alle tabellen een kolom 'id' met AUTO_INCREMENT te geven (Zie ook Stijns voorbeeld maar, alles heeft een id)
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.351s