Avatar billede baronen20 Nybegynder
19. august 2003 - 12:43 Der er 13 kommentarer og
1 løsning

komprimering af kode

Jeg har en lille kodestump der viser samlet antal sygedage pr. år for hhv. elever og ansatte i en database.

Jeg synes bare det fylder en del, og tænkte om der var nogle kloge hoveder herinde der havde en ide til hvordan man kunne forkorte den.

Link til kode: http://www.b4r0n3n.dk/stuff/vis.php
Avatar billede erikjacobsen Ekspert
19. august 2003 - 12:48 #1
over "... GROUP BY e_aar"  ;)
Avatar billede erikjacobsen Ekspert
19. august 2003 - 12:48 #2
overvej "... GROUP BY e_aar"  ;)
Avatar billede jakoba Nybegynder
19. august 2003 - 13:04 #3
du kunne med fordel benytte arrays istedet for alle de variable med årstal i enden. fx:

$syge_ansat = array();
for ($i=2003; $i<=2010; i++ ) {
    $syge_ansat[$i] = mysql_query("
        SELECT SUM(e_dage)
        FROM register
        WHERE a_stilling = 'Ansat'
          AND e_aar = '$i'
    ");
}

istedet for at gentage den essentielt samme linie 8 gange. Det bliver faktisk også nemmere at rette i på den måde.

mvh JakobA
Avatar billede erikjacobsen Ekspert
19. august 2003 - 13:07 #4
Men mon ikke en

  select e_aar,sum(e_dage) as antal from register where a_stilling='ansat' group by e_aar

er at foretrække
Avatar billede jakoba Nybegynder
19. august 2003 - 13:17 #5
Jo du har ret. så får han også det hele samlet i een query. Meget hurtigere.
Avatar billede jakoba Nybegynder
19. august 2003 - 13:20 #6
evt endda:
    select e_aar,sum(e_dage) as antal, a_stilling
    from register
    where a_stilling='Ansat'
      or a_stilling='Elev'
    group by a_stilling, e_aar
Avatar billede erikjacobsen Ekspert
19. august 2003 - 13:23 #7
I where sætning kan også indskrænkes på  årstallene, hvis det ønskes.
Avatar billede baronen20 Nybegynder
19. august 2003 - 13:42 #8
ok, jeg kendte ikke lige "group by".

Hvordan får jeg smidt resultatet ud på siden?
Jeg plejer at lave en:

$row = mysql_fetch_array($query);

og så fx. en: echo $row[a_stilling]

Kan jeg bruge den?
Avatar billede baronen20 Nybegynder
19. august 2003 - 13:42 #9
Eller skal der en "while..." ind?
Avatar billede erikjacobsen Ekspert
19. august 2003 - 13:51 #10
Ja, en while er nødvendig, da du får en række pr årstal (og evt pr
stilling, hvis du har den med)
Avatar billede baronen20 Nybegynder
19. august 2003 - 15:00 #11
Så det vil blive til:

$resultat = mysql_query("select e_aar,sum(e_dage) as antal, a_stilling from register where a_stilling='Ansat' or a_stilling='Elev' group by a_stilling, e_aar");

while (mysql_num_rows($resultat) != 0) {
echo $resultat[0];
}

...eller noget i den stil?
Avatar billede erikjacobsen Ekspert
19. august 2003 - 15:19 #12
$resultat = mysql_query("select e_aar,sum(e_dage) as antal, a_stilling from register where a_stilling='Ansat' or a_stilling='Elev' group by a_stilling, e_aar") or die(mysql_error());

while ($row=mysql_fetch_array($resultat)) {
echo $row['e_aar'];
echo $row['antal'];
echo $row['a_stilling'];
}
Avatar billede baronen20 Nybegynder
19. august 2003 - 15:56 #13
selvfølgelig... læg æ svar
Avatar billede erikjacobsen Ekspert
19. august 2003 - 21:28 #14
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester