While?
ik ben bezig met een cijfersysteem en bij het gemiddelde uit te rekenen van bijvoorbeeld 4 periode gebruik ik deze code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<table width=600 align=center>
<tr>
<td class="subTitle"><b>Overzicht</b></td>
</tr>
<tr>
<td class="mainTxt">
<table>
<tr>
<td><b>Vak</b></td>
<td width='100'><b>Periode 1</b></td>
<td width='100'><b>Periode 2</b></td>
<td width='100'><b>Periode 3</b></td>
<td width='100'><b>Periode 4</b></td>
<td width='100'><b>Gemiddeld totaal</b></td>
</tr>
<?
$select = "SELECT ROUND(SUM(cijfer * weging) / SUM(weging),2) AS gemiddeld FROM `cijfers` WHERE `vak`='Geschiedenis' AND `periode`='1' GROUP BY `vak` ";
$query = mysql_query($select);
$list = mysql_fetch_object($query);
$select2 = "SELECT ROUND(SUM(cijfer * weging) / SUM(weging),2) AS gemiddeld2 FROM `cijfers` WHERE `vak`='Geschiedenis' AND `periode`='2' GROUP BY `vak` ";
$query2 = mysql_query($select2);
$list2 = mysql_fetch_object($query2);
$select3 = "SELECT ROUND(SUM(cijfer * weging) / SUM(weging),2) AS gemiddeld3 FROM `cijfers` WHERE `vak`='Geschiedenis' AND `periode`='3' GROUP BY `vak` ";
$query3 = mysql_query($select3);
$list3 = mysql_fetch_object($query3);
$select4 = "SELECT ROUND(SUM(cijfer * weging) / SUM(weging),2) AS gemiddeld4 FROM `cijfers` WHERE `vak`='Geschiedenis' AND `periode`='4' GROUP BY `vak` ";
$query4 = mysql_query($select4);
$list4 = mysql_fetch_object($query4);
$aantal1 = mysql_num_rows($query);
$aantal2 = mysql_num_rows($query2);
$aantal3 = mysql_num_rows($query3);
$aantal4 = mysql_num_rows($query4);
$aantal = round($aantal1+$aantal2+$aantal3+$aantal4);
$gemiddeldtotaal = round(($list->gemiddeld+$list2->gemiddeld2+$list3->gemiddeld3+$list4->gemiddeld4)/$aantal,2);
print<<<ENDHTML
<tr bgcolor='#C3E9CC'>
<td><a href='bekijkvak.php?vak=Geschiedenis'>Geschiedenis</a></td>
<td><b>{$list->gemiddeld}</b></font></td>
<td><b>{$list2->gemiddeld2}</b></font></td>
<td><b>{$list3->gemiddeld3}</b></td>
<td><b>{$list4->gemiddeld4}</b></td>
<td><b>{$gemiddeldtotaal}</b></td>
ENDHTML;
?>
</tr>
</table>
</td>
</tr>
</table>
<tr>
<td class="subTitle"><b>Overzicht</b></td>
</tr>
<tr>
<td class="mainTxt">
<table>
<tr>
<td><b>Vak</b></td>
<td width='100'><b>Periode 1</b></td>
<td width='100'><b>Periode 2</b></td>
<td width='100'><b>Periode 3</b></td>
<td width='100'><b>Periode 4</b></td>
<td width='100'><b>Gemiddeld totaal</b></td>
</tr>
<?
$select = "SELECT ROUND(SUM(cijfer * weging) / SUM(weging),2) AS gemiddeld FROM `cijfers` WHERE `vak`='Geschiedenis' AND `periode`='1' GROUP BY `vak` ";
$query = mysql_query($select);
$list = mysql_fetch_object($query);
$select2 = "SELECT ROUND(SUM(cijfer * weging) / SUM(weging),2) AS gemiddeld2 FROM `cijfers` WHERE `vak`='Geschiedenis' AND `periode`='2' GROUP BY `vak` ";
$query2 = mysql_query($select2);
$list2 = mysql_fetch_object($query2);
$select3 = "SELECT ROUND(SUM(cijfer * weging) / SUM(weging),2) AS gemiddeld3 FROM `cijfers` WHERE `vak`='Geschiedenis' AND `periode`='3' GROUP BY `vak` ";
$query3 = mysql_query($select3);
$list3 = mysql_fetch_object($query3);
$select4 = "SELECT ROUND(SUM(cijfer * weging) / SUM(weging),2) AS gemiddeld4 FROM `cijfers` WHERE `vak`='Geschiedenis' AND `periode`='4' GROUP BY `vak` ";
$query4 = mysql_query($select4);
$list4 = mysql_fetch_object($query4);
$aantal1 = mysql_num_rows($query);
$aantal2 = mysql_num_rows($query2);
$aantal3 = mysql_num_rows($query3);
$aantal4 = mysql_num_rows($query4);
$aantal = round($aantal1+$aantal2+$aantal3+$aantal4);
$gemiddeldtotaal = round(($list->gemiddeld+$list2->gemiddeld2+$list3->gemiddeld3+$list4->gemiddeld4)/$aantal,2);
print<<<ENDHTML
<tr bgcolor='#C3E9CC'>
<td><a href='bekijkvak.php?vak=Geschiedenis'>Geschiedenis</a></td>
<td><b>{$list->gemiddeld}</b></font></td>
<td><b>{$list2->gemiddeld2}</b></font></td>
<td><b>{$list3->gemiddeld3}</b></td>
<td><b>{$list4->gemiddeld4}</b></td>
<td><b>{$gemiddeldtotaal}</b></td>
ENDHTML;
?>
</tr>
</table>
</td>
</tr>
</table>
Nu was mijn vraag: Ik heb nu 1 vak nl. Geschiedenis. Maar als ik nou twee vakken heb moet ik bovenstaande code dan alles weer aanpassen. Want ik had geprobeerd met een while maar dan moet je selecteren op naam van het vak, kan dat? Zo ja wil je een voorbeeldje laten zien.....?
Alvast Bedankt!
Thom
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
SELECT
vak,
periode,
ROUND(SUM(cijfer * weging) / SUM(weging), 2) AS gemiddelde
FROM
cijfers
GROUP BY
vak,
periode
vak,
periode,
ROUND(SUM(cijfer * weging) / SUM(weging), 2) AS gemiddelde
FROM
cijfers
GROUP BY
vak,
periode
Een voorbeeldje wat ik lokaal even in elkaar gedraaid heb:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
mysql> SELECT * FROM cijfers;
+----+--------+--------+--------+---------+
| id | vak_id | cijfer | weging | periode |
+----+--------+--------+--------+---------+
| 1 | 1 | 8.0 | 3 | 1 |
| 2 | 1 | 9.0 | 2 | 1 |
| 3 | 1 | 7.5 | 1 | 2 |
| 4 | 2 | 7.5 | 2 | 1 |
| 5 | 2 | 9.9 | 3 | 2 |
| 6 | 2 | 5.0 | 1 | 2 |
+----+--------+--------+--------+---------+
6 rows in set (0.00 sec)
mysql> SELECT vak_id, periode, ROUND(SUM(cijfer * weging) / SUM(weging), 2) AS gemiddelde
-> FROM cijfers
-> GROUP BY vak_id, periode;
+--------+---------+------------+
| vak_id | periode | gemiddelde |
+--------+---------+------------+
| 1 | 1 | 8.40 |
| 1 | 2 | 7.50 |
| 2 | 1 | 7.50 |
| 2 | 2 | 8.68 |
+--------+---------+------------+
4 rows in set (0.00 sec)
+----+--------+--------+--------+---------+
| id | vak_id | cijfer | weging | periode |
+----+--------+--------+--------+---------+
| 1 | 1 | 8.0 | 3 | 1 |
| 2 | 1 | 9.0 | 2 | 1 |
| 3 | 1 | 7.5 | 1 | 2 |
| 4 | 2 | 7.5 | 2 | 1 |
| 5 | 2 | 9.9 | 3 | 2 |
| 6 | 2 | 5.0 | 1 | 2 |
+----+--------+--------+--------+---------+
6 rows in set (0.00 sec)
mysql> SELECT vak_id, periode, ROUND(SUM(cijfer * weging) / SUM(weging), 2) AS gemiddelde
-> FROM cijfers
-> GROUP BY vak_id, periode;
+--------+---------+------------+
| vak_id | periode | gemiddelde |
+--------+---------+------------+
| 1 | 1 | 8.40 |
| 1 | 2 | 7.50 |
| 2 | 1 | 7.50 |
| 2 | 2 | 8.68 |
+--------+---------+------------+
4 rows in set (0.00 sec)
Je ziet dat ik vak_id gebruik, dat is ook de manier waarop het hoort. Je hebt namelijk nog een andere tabel nodig waarin je alle vaknamen opslaat. Dit heeft met normalisatie van je datamodel te maken en zorgt ervoor dat je gegevens niet dubbel opslaat in je database.
Als je deze ene query dus uitvoert en je fetcht de resultaten in een while loop, dan ben je dus al klaar...