Vraag over SQL probleem.
Ik heb vanmorgen het artikel over JOINS gelezen
http://www.phphulp.nl/php/tutorials/3/479/1116/
En ben daar net een uurtje mee bezig geweest. Echter krijg ik een probleem als ik rijen wil groeperen.
De sql structuur ziet er als volgt uit:
ModuleNaam:
id modulenaam
1 Wiskunde
2 Scheikunde
3 Aardrijkskunde
ModuleCode:
id mod_id Code Status Cijfer
1 1 test1 Goed 8
2 1 test4 Slecht 9
3 1 test3 Fout 4
4 2 code1 Goed 3
5 2 code2 Goed 2
6 2 code3 Slecht 1
7 2 code4 - 10
8 3 1234 Goed 5
9 3 4321 Slecht 6
En de query:
$sql = "SELECT
mn.ModuleNaam,
mc.Code,
mc.Status,
mc.Cijfer
FROM
modulecode AS mc
INNER JOIN
modulenaam AS mn
ON mn.id = mc.mod_id";
Ik gebruik de PDO classe voor het verwerken van de query.
Ik krijg met fetchall netjes een array terug met de gegevens.
edit: klein fragment van de array!
[2] => Array
(
[ModuleNaam] => Wiskunde
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
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
=> test3
[Status] => Matig
[Cijfer] => 5
)
[3] => Array
(
[ModuleNaam] => Scheikunde
[Code] => code1
[Status] => Slecht
[Cijfer] => 9
)
[4] => Array
(
[ModuleNaam] => Scheikunde
[Code] => code2
[Status] => Goed
[Cijfer] => 0
)
Nu vroeg ik me af of ik in een query ook al de codes per modulenaam gesorteerd kan krijgen.
Dus zo:
[4] => Array
(
[ModuleNaam] => Scheikunde
Array
(
[Code] => code2
[Status] => Goed
[Cijfer] => 0
[Code] => code2
[Status] => Goed
[Cijfer] => 0
)
)
Met een foreach loop krijg ik het wel voor elkaar, maar vroeg me af of het met 1 query ook kan.
foreach($result as $row)
{
Haal modulecode per modulenaam op
}
Hoop dat de vraag duidelijk is.
[Status] => Matig
[Cijfer] => 5
)
[3] => Array
(
[ModuleNaam] => Scheikunde
[Code] => code1
[Status] => Slecht
[Cijfer] => 9
)
[4] => Array
(
[ModuleNaam] => Scheikunde
[Code] => code2
[Status] => Goed
[Cijfer] => 0
)
Nu vroeg ik me af of ik in een query ook al de codes per modulenaam gesorteerd kan krijgen.
Dus zo:
[4] => Array
(
[ModuleNaam] => Scheikunde
Array
(
[Code] => code2
[Status] => Goed
[Cijfer] => 0
[Code] => code2
[Status] => Goed
[Cijfer] => 0
)
)
Met een foreach loop krijg ik het wel voor elkaar, maar vroeg me af of het met 1 query ook kan.
foreach($result as $row)
{
Haal modulecode per modulenaam op
}
Hoop dat de vraag duidelijk is.
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?
[Code] => code2
[Status] => Goed
[Cijfer] => 0
[Code] => code2
[Status] => Goed
[Cijfer] => 0
?>
[Code] => code2
[Status] => Goed
[Cijfer] => 0
[Code] => code2
[Status] => Goed
[Cijfer] => 0
?>
Hier heb je 2x de key Code, 2x de key Status en 2x de key Cijfer. Deze worden uiteraard overschreven, je houdt er maar eentje over.
Maar wat is nu het daadwerkelijke probleem? De weergave? Geef dan de module maar 1x weer en dat probleem is opgelost.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
Wil graag dat ModuleNaam op hetscherm komt met de daarbij betreffende codes.
dus zo:
Wiskunde
code cijfer status
test1 6 Goed
test2 9 Slecht
test3 10 -
Aardrijkskunde
code cijfer status
1234 6 Goed
4321 9 Slecht
Het liefste haal ik met fetch all met 1 query de modulenaam met de daarbij behorende codes.
Die array pomp ik in smarty en die maakt er netjes een tabelletje van.
De vraag is dus:
Kan dit in 1 query?
Of is een loop verstandiger?
Gewijzigd op 01/01/1970 01:00:00 door Mark Eilander
Gewijzigd op 01/01/1970 01:00:00 door Mark Eilander
Per record krijg je uiteraard ook het vak door, het kan niet zo zijn dat je ineens data kwijt raakt. Hoe jij dit resultaat in een array pompt, mag je helemaal zelf weten, dat kun je dus precies zo doen zoals jij dat handig vindt.
Dat je daar niet een generieke oplossing als fetchAll() voor kunt gebruiken, dat is niets bijzonders, een generieke oplossing werkt maar zelden bij een specifiek probleem.
Tip: gebruik fetch() en ga zelf de gewenste array aanmaken. fetchAll() kan onmogelijk raden welke array jij vandaag graag wil aanmaken.