Tellen vanuit Database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bas

Bas

02/01/2006 22:31:00
Quote Anchor link
Beste,

ik wil graag een programma maken waarmee hij vanuit de database alle waarden op wilt tellen (een soort van cijfersysteem, waar ik online al m'n cijfers invoeren, hoevaak ze tellen etc.) dus bijvoorbeeld ik heb voor frans (het proto-voorbeeld vak :P) een 5, 8, 9 ,7 gehaald. De 5 & 9 tellen 2 keer mee, de 8 & 9 4x. dan krijg je dus:

$som = 5 + 5 + 8 + 8 + 8 + 8 + 9 + 9 + 7 + 7 + 7 + 7;

maar, hoe kan ik dit doen als ik m'n waarden in de database staan. Ik ga d'r eigenlijk een beetje van uit dat PHP dit wel kan, maar ik kan nergens op internet een goed scriptje voor krijgen. :)

Alvast Bedankt

Bas
 
PHP hulp

PHP hulp

05/11/2024 15:36:00
 
Jan Koehoorn

Jan Koehoorn

02/01/2006 22:44:00
Quote Anchor link
Hoi Bas,

een leuk idee! Bij het opzetten van een database moet je altijd kijken hoe zit met je datamodel.

In dit geval:

- je hebt een aantal vakken
- per vak kun je meer dan 1 cijfer krijgen
- elk cijfer heeft een bepaald 'gewicht', 1, 2, 3 of 4

Je hebt dus twee tabellen nodig:

- vakken
id
naam

- cijfers
id
cijfer
gewicht
vak_id

Als je het zo opzet, kun je heel gemakkelijk allerlei overzichten uit je db laten rollen.
 
Bas

Bas

02/01/2006 22:48:00
Quote Anchor link
Ok, super bedankt, maar hoe kun ik ze dan automatisch laten optellen? Dus zoals ik voordeed in m'n voorbeeld :)
 
Jan Koehoorn

Jan Koehoorn

02/01/2006 22:52:00
Quote Anchor link
Dat doe je dan met de MySQL functie SUM(). Maar voordat ik ga kijken of ik je daar een voorbeeld van kan geven wil ik graag weten of je het ook echt zo aan gaat pakken.
 
Bas

Bas

02/01/2006 22:53:00
Quote Anchor link
gefeli, 3200 posts ;)

Wat bedoel je met: "Wil ik graag weten of je het ook echt zo aan gaat pakken"?

Bas
 
Robert Deiman

Robert Deiman

02/01/2006 23:00:00
Quote Anchor link
Stel je haalt ze op:

voorbeeld:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$frans
[1]['cijfer']=8;
$frans[1]['weging']=2;

$frans[2]['cijfer']=4;
$frans[2]['weging']=3;
// cijfers tellen
$tellen=count($frans);
$eindcijfer=0;
$weging=0;
for ($i=1;$i<=$tellen;$i++){
// totaal punten (cijfer*weging)
    $totaalcijfer .= $frans[$i]['cijfer']*$frans[$i]['weging'];
// totale weging
    $weging.=$frans[$i]['weging'];
}

$eindcijfer=$totaalcijfer/$weging;
echo $eindcijfer;
?>
 
Jan Koehoorn

Jan Koehoorn

02/01/2006 23:02:00
Quote Anchor link
Bas:
gefeli, 3200 posts ;)

Wat bedoel je met: "Wil ik graag weten of je het ook echt zo aan gaat pakken"?

Bas


Daarmee bedoelde ik: als je mijn idee niets vindt, ga ik er geen tijd in steken om een mooie query voor je te verzinnen :-)
 
Jan Koehoorn

Jan Koehoorn

02/01/2006 23:03:00
Quote Anchor link
@ Robert: die code zal denk ik wel werken, maar zoals je weet streef ik ernaar om de db het werk te laten doen en alles in een mooie elegante query te doen. Maar voor Bas is jouw tip denk ik makkelijker te begrijpen.
 
Bas

Bas

02/01/2006 23:04:00
Quote Anchor link
Jan:
Bas:
gefeli, 3200 posts ;)

Wat bedoel je met: "Wil ik graag weten of je het ook echt zo aan gaat pakken"?

Bas


Daarmee bedoelde ik: als je mijn idee niets vindt, ga ik er geen tijd in steken om een mooie query voor je te verzinnen :-)


Je idee lijkt me wel wat! Tenminste, als je denkt dat het handig is :) en natuurlijk me wilt helpen ;)
 
Robert Deiman

Robert Deiman

02/01/2006 23:05:00
Quote Anchor link
@Jan

Ik weet het, dat zou het mooiste zijn. (in ieder geval het snelst) maar omdat ik zo niet weet hoe die query eruit moet zien, bedacht ik dat het zo ook wel kon.

ff door op mijn voorbeeld, als je ze ophaalt uit je tabel, en dit zijn je kolomnamen:
cijfer
weging

dan krijg je het zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
$eindcijfer
=0;
$weging=0;

while ($cijfers=mysql_fetch_array($sql)){

// totaal punten (cijfer*weging)
    $totaalcijfer .= $cijfers['cijfer']*$cijfer['weging'];
// totale weging
    $weging.=$cijfer['weging'];
}

$eindcijfer=$totaalcijfer/$weging;
echo $eindcijfer;
?>
Gewijzigd op 02/01/2006 23:07:00 door Robert Deiman
 
Jan Koehoorn

Jan Koehoorn

03/01/2006 01:10:00
Quote Anchor link
Lijkt mij prima te werken.
 
Bas

Bas

03/01/2006 08:59:00
Quote Anchor link
Bedankt, maaruh als ik die code gebruik en hem laat verbinden met mijn DB..

dan rolt dit er uit: 541.861758077

terwijl m'n cijfers zijn:
Cijfer | Weging
7,5 | 1
7,5 | 3
7,5 | 3
8,0 | 3

Wat doe ik fout.. :O
 
Robert Deiman

Robert Deiman

03/01/2006 09:32:00
Quote Anchor link
probeer het eens zo dan:

// totaal punten (cijfer*weging)
$totaalcijfer .= ($cijfers['cijfer']*$cijfer['weging']);
 
Willem Jan Z

Willem Jan Z

03/01/2006 10:15:00
Quote Anchor link
Je hebt een typfout...

cijfers[] en daarna cijfer[]
 
Bas

Bas

03/01/2006 10:24:00
Quote Anchor link
die had ik al gezien :)

evenals die:
$weging.=$cijfer['weging']; = nu
$weging.=$cijfers['weging'];
 
Robert Deiman

Robert Deiman

03/01/2006 10:31:00
Quote Anchor link
En nu klopt het wel? of nog steeds niet?
 
Bas

Bas

03/01/2006 10:33:00
Quote Anchor link
Still not..
 
Robert Deiman

Robert Deiman

03/01/2006 10:40:00
Quote Anchor link
Met die ( ) eromheen ook niet?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
$eindcijfer
=0;
$weging=0;

while ($cijfers=mysql_fetch_array($sql)){

// totaal punten = +(cijfer*weging)
    $totaalcijfer .= ($cijfers['cijfer']*$cijfers['weging']);
// totale weging
    $weging.=$cijfers['weging'];
}

$eindcijfer=$totaalcijfer/$weging;
echo $eindcijfer;
?>


Als ik hier zo ff met logica doorheenloop doet die dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$totaalcijfer
.= 7,5*1; //7,5
$totaalcijfer .= 7,5*3; //22,5 --> 30
$totaalcijfer .= 7,5*3; //22,5 --> 52,5
$totaalcijfer .= 8*3; //24 --> 76,5

$weging .=1; //1
$weging .=3; //4
$weging .=3; //7
$weging .=3; //10

$eindcijfer = 76,5/10; // 7,65 (nog niet afgerond :P)
?>

Maar misschien als je de cijfers met een . in plaats van een , doet dat het wel werkt :)
 
Willem Jan Z

Willem Jan Z

03/01/2006 11:02:00
Quote Anchor link
En:
$weging += $cijfers['weging']

Want nu zet je het alleen achter elkaar...

Edit: Inderdaad, moet wel met punt zijn.

Maar dat kan je nog met een regeltje vervangen, hoef je ook niet op te letten hoe je ze in de DB stopt.

str_replace(",",".",$cijfers['cijfer']);
Gewijzigd op 03/01/2006 11:03:00 door Willem Jan Z
 
Robert Deiman

Robert Deiman

03/01/2006 11:29:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
$eindcijfer
=0;
$weging=0;

while ($cijfers=mysql_fetch_array($sql)){
$cijfers=str_replace(",",".",$cijfers['cijfer']);
// totaal punten = +(cijfer*weging)
    $totaalcijfer += ($cijfers*$cijfers['weging']);
// totale weging
    $weging+=$cijfers['weging'];
}

$eindcijfer=$totaalcijfer/$weging;
echo $eindcijfer;
?>


EDIT:
Willem-Jan had inderdaad gelijk, moet wel met +=, anders gooit die alle cijfers gewoon achter elkaar. :)
Gewijzigd op 03/01/2006 11:31:00 door Robert Deiman
 



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.