[php]tabel maken, 2 array's vergelijken samen met statements

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • gitaarwerk
  • Registratie: Augustus 2001
  • Niet online

gitaarwerk

Plays piano,…

Topicstarter
we zijn sinds gisteren bezig met dit op t elossen, maar komen er niet uit (zelfs niet met php boek ernaast enzo :X )

anyway :)

we hebben 2 arrays..
in de eerste staan de onderwerpen met de ID's
in de tweede array staan de gebruikers met welke scores bij welk onderwerpID

wat we er tot nu toe uitkrijgen is dit :

leerlingnaamonderwerp1onderwerp2onderwerp3
Klaas-- onderwerp2--
Pietonderwerp1-- -- -- --onderwerp3
Hans-- -- onderwerp3


wat we eruit willen krijgen is :

leerlingnaamonderwerp1onderwerp2onderwerp3
Klaas onderwerp2
Pietonderwerp1 onderwerp3
Hans onderwerp3


de eerste rij (de onderwerp namen) is dus 1 array..
de volgende rijen zijn uit de 2e array.. de scores & onderwerpen (hier even als namen dus weergegeven om een idee te geven wat het nu doet)

dit doen we met een loop, maar komen er niet uit..
we willen dus als als een leerling bijvoorbeeld eerste onderwerp niet gedaan heeft, dat ie een lege <td> geeft.. en netjes onder de goede colom zet ipv em helemaal weglaten en onder de verkeerde colom staat

stukje code :
PHP:
1
2
3
4
5
6
7
8
9
10
11
    for ($j=0;$j <count($onderwerpen); $j++)
    {
        echo $j;
        if ($leerlingen[$i]['onderwerp'] != $onderwerpen[$j])
        {
            echo '<td> --</td>';
        }
        else
        {
        echo '<td>'.$leerlingen[$i]['onderwerp'].'-'.$leerlingen[$i]['score'].'</td>';
        }

[ Voor 97% gewijzigd door gitaarwerk op 03-02-2004 10:46 ]

Ontwikkelaar van NPM library Gleamy


Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

een lege cel in je tabel krijg je door er   neer te zetten ipv ' --'

edit: lol, de "& nbsp;" wordt natuurlijk ook echt een non-breaking space.. (spatie weglaten dus)

[ Voor 44% gewijzigd door X-Lars op 03-02-2004 10:56 ]


Acties:
  • 0 Henk 'm!

  • gitaarwerk
  • Registratie: Augustus 2001
  • Niet online

gitaarwerk

Plays piano,…

Topicstarter
haha.. ;) ik wou et alleen ff laten zien.. ik weet natuurlijk dat ie niet leeg wordt :P
haha

anyway..heb ik een idee gekregen waarom die dat doet..
We exploden de array om maar 1 username weer te geven.. maar hij bestaat eigenlijk uit meerdere.. meerdere scores per user (2 tabellen) .. dus als er 3 scores totaal zijn.. heeft ie per rij er 2 niet.. dus die geeft ie dan ook niet weer.. jawel.. nu hier '--' haha.. :) nu zorgen dus dat die die niet weergeeft :/

Ontwikkelaar van NPM library Gleamy


Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

haal je de data uit een db? dan kun je het in je query al wel oplossen dunkt me

Acties:
  • 0 Henk 'm!

  • gitaarwerk
  • Registratie: Augustus 2001
  • Niet online

gitaarwerk

Plays piano,…

Topicstarter
X-Lars schreef op 03 februari 2004 @ 11:11:
haal je de data uit een db? dan kun je het in je query al wel oplossen dunkt me
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
            $query = mysql_query("SELECT 
gebruikers.Gebruiker_Voornaam, gebruikers.Gebruiker_Achternaam, 
klas.Klas_Nummer, score.Score_Score, 
les_onderwerp.Les_Onderwerp_ID,les_onderwerp.Les_Onderwerp_Naam, 
locaties.Locatie_Naam FROM gebruikers, klas, score, les_onderwerp, locaties 
WHERE klas.Klas_ID = '$invoer' AND score.Gebruiker_ID = gebruikers.Gebruiker_ID 
AND les_onderwerp.Les_Onderwerp_ID = score.Onderwerp_ID AND 
gebruikers.Klas_ID = klas.Klas_ID AND locaties.Locatie_ID = klas.Locatie_ID 
ORDER BY gebruikers.Gebruiker_$VoorAchterNaam, les_onderwerp.Les_Onderwerp_ID");

        $i = 0;
        while ($result = mysql_fetch_object($query))
            {
                $array[$i]['voornaam'] =    $result->Gebruiker_Voornaam;
                $array[$i]['achternaam'] =  $result->Gebruiker_Achternaam;
                $array[$i]['onderwerp'] =   $result->Les_Onderwerp_Naam;
                $array[$i]['score'] =       $result->Score_Score;
                $array[$i]['onderwerpid'] = $result->Les_Onderwerp_ID;
                $i++;
            }
        return $array;
// dit is slechts een gedeelte uit de functie.. hij is redelijk groot, en 
// onderverdeeld.. dus dit stukje is wat we gebruiken hiervoor


enlighten me :Y)

we gebruiken de queries voor andere ook.. voor de onderwerpen hebben we nog een aparte query.. als namelijk deze tabel sgoed werkt, kunnen we door de query functie in klassen opgedeeld ) makkelik gebruiken voor verzichten te maken.. dus de query zal niet teveel moeten worden veranderd (hoogstends geoptimaliseerd :P )

kijk..ik denk dat et em in de loop zit..

bij de 1e waarde op de juiste plaats gaat goed..
bij de 2e waarde... geeft ie een lege terug.. en dan pas de 2e waarde..dat is goed :) maar.. stel dat je de 1e waarde al hebt, zet ie er toch echt een extra bij..
nu zou die dus ergends een extra waarde moeten weten om te tellen per gebruikersnaam.. en daarna pas overnieuw beginnen met het parsen van de 2e rij...

[ Voor 51% gewijzigd door gitaarwerk op 03-02-2004 11:22 ]

Ontwikkelaar van NPM library Gleamy


Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Hier valt vast een heleboel te optimaliseren..
X-Lars brings in the MySQL query optimize-guru's... (would they listen?)

[ Voor 6% gewijzigd door X-Lars op 03-02-2004 11:23 ]


Acties:
  • 0 Henk 'm!

  • gitaarwerk
  • Registratie: Augustus 2001
  • Niet online

gitaarwerk

Plays piano,…

Topicstarter
X-Lars schreef op 03 februari 2004 @ 11:22:
Hier valt vast een heleboel te optimaliseren..
X-Lars brings in the MySQL query optimize-guru's... (would they listen?)
hmm tis niet echt de bedoeling om eerste te optimaliseren..

anyway..we zijn er eindelijk uit :{ zucht..

om even lief te zijn voor de mensen die er wat aan moeten hebben nog ooit :)

de functiewerking..
$klas = klasnummer (ID van de klassen)
$VoorAchterNaam = deze bepaalt sorteermethode op voor of achternaam

voor de geinteseerde willen we wel de rest erop zetten

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
function KlasScoreWeergave($klas, $VoorAchterNaam)
    {
        // vraag klas- en -ondewerp gegevens op
        $leerlingen = QUERY::KlasScoreWeergave(1,$klas,$VoorAchterNaam);
        $query = QUERY::OnderwerpenPerKlas($klas);
        // maak tabel aan
        echo '<table border=1 class="KlasScoreTabel"><tr><td>Leerling naam</td>';
        // horizontaal : onderwerpweergave
        while ($result = mysql_fetch_object($query))
        {
            $onderwerpen[] = $result->Les_Onderwerp_Naam;
        }
         // het aantal onderwerpen tellen
        $aantal_onderwerpen = count($onderwerpen);
        
        // laat onderwerpen zien
        for ($i=0;$i < $aantal_onderwerpen; $i++)
        {
            echo '<td>'.$onderwerpen[$i].'</td>';
        }
        echo '<td><b>Gemiddelde</b></tr>';
        
        // laat leerlingen zien
        for ($i=0;$i < count($leerlingen); $i++)
        {
            if ($leerlingen[($i-1)]['voornaam'] != $leerlingen[$i]['voornaam'])
            {
                if ($i>0)echo '</tr>';
                $gem = 0;
                $aantal = 0;
                echo '<tr><td>'.$leerlingen[$i]['voornaam'].'&nbsp;'.$leerlingen[$i]['achternaam'].'</td>';
                $check = 0; $k=-1;
            }
            // zet score per onderwerp neer
            for ($j=0;$j < $aantal_onderwerpen; $j++)
            {
                if ($leerlingen[$i]['onderwerp'] != $onderwerpen[$j] && $j > $k)
                {
                    echo '<td>&nbsp;</td>';
                }
                else if ($leerlingen[$i]['onderwerp'] == $onderwerpen[$j])
                {
                    $gemmidelde_per_onderwerp["ond$j"][] = $leerlingen[$i]['score'];
                    echo '<td>'.$leerlingen[$i]['score'].'</td>'; $k = $j++; $j=($aantal_onderwerpen+3); 
                    $gem +=$leerlingen[$i]['score']; $aantal++;
                    
                }
            }
            if ($leerlingen[($i+1)]['voornaam'] != $leerlingen[$i]['voornaam']) 
            {
                while (($k+1) < $aantal_onderwerpen) { echo '<td>&nbsp;</td>'; $k++;}
                $gemiddelde = round(($gem / $aantal),2);
                $gemiddelde_per_leerling[] = $gemiddelde;
                echo "<td>$gemiddelde</td>";
            }
            
        }   

        
    // bereken gemiddelden
    
    $aantal_gemiddelde = count($gemiddelde_per_leerling);
    $leerling_gemiddelde = round((array_sum($gemiddelde_per_leerling) / $aantal_gemiddelde),2); 
    echo '</tr><tr><td><b>Gemiddeld</b></td>';
    for ($i=0;$i < $aantal_onderwerpen; $i++)
    {
        $aantal     = count($gemmidelde_per_onderwerp["ond$i"]);
        $gemiddelde = round((array_sum($gemmidelde_per_onderwerp["ond$i"])),2) / $aantal;
        echo "<td>$gemiddelde</td>";
    }
    echo "<td>$leerling_gemiddelde</td></tr></table>";
    
    }


als iemand tips heeft om het sneller te krijgen.. van harte welkom

[ Voor 83% gewijzigd door gitaarwerk op 03-02-2004 14:31 ]

Ontwikkelaar van NPM library Gleamy

Pagina: 1