Vraag over SQL probleem.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mark Eilander

Mark Eilander

16/09/2008 05:23:00
Quote Anchor link
Goede morgen,

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)
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
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.
 
PHP hulp

PHP hulp

29/03/2024 10:08:38
 
Frank -

Frank -

16/09/2008 05:31:00
Quote Anchor link
Nee dat gaat niet, je kunt onmogelijk 1 key in een array 2 waardes geven:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?
                [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 -
 
Mark Eilander

Mark Eilander

16/09/2008 05:37:00
Quote Anchor link
Excusses voor de onduidelijke uitleg. Die array was niet helemaal goed, maar het gaat idd om de weergaven.

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
 
Mark Eilander

Mark Eilander

16/09/2008 05:40:00
Quote Anchor link
Gewijzigd op 01/01/1970 01:00:00 door Mark Eilander
 
Frank -

Frank -

16/09/2008 06:19:00
Quote Anchor link
Een query heeft helemaal niets met de weergave te maken, dat kan dus onmogelijk het probleem zijn.

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.
 



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.