Avatar billede hcthorsen Praktikant
03. december 2009 - 22:40 Der er 5 kommentarer og
1 løsning

Hjælp til søgning

Til brug i en JPgraph skal jeg lave et udtræk fra min database. jeg ønsker at afbillede hvor mange procent af mine "procedurer" der har resultat='succes'. Til det formål har jeg lavet følgende script:

$data = array();
$data2 = array();
$leg = array();
$i=0;
$sql = mysqli_query ($conn, "SELECT procedurer, COUNT(procedurer) AS antal FROM erfaring_procedurer WHERE user = '$_SESSION[user]' AND resultat='succes' GROUP BY procedurer");
while ($row = mysqli_fetch_array($sql)) {
$data[] = $row['antal'];
}
$sql = mysqli_query ($conn, "SELECT procedurer, COUNT(procedurer) AS antal FROM erfaring_procedurer WHERE user = '$_SESSION[user]' GROUP BY procedurer");
while ($row = mysqli_fetch_array($sql)) {
$data2[] = $data[$i]/$row['antal']*100;
$leg[] = $row['procedurer']." (".$row['antal'].")";
$i=$i+1;
}


Det virker perfekt så længe man bare har en resultat='succes' for hver procedure, men hvis resultat='fejl' for alle forekomster af en given procedure, så bliver der selvfølgelig ikke lige mange elementer i ovenstående to søgninger. Er der nogen der har en ide til hvordan det problem løses?

Jeg skal simpelthen bare have indsat et '0' hvis der ikke er nogen 
forekomster af resultat='succes'. Håber nogen forstår hvad jeg mener:-)
Avatar billede wanze Nybegynder
03. december 2009 - 23:53 #1
Det går vel ikke blot at indsætte et nul, så vil
  $data2[] = $data[$i]/$row['antal']*100;
vel forsøge at dividere med dette og skabe en divide by zero-fejl.

Jeg synes ikke helt jeg kan gennemskue din kode ellers, så det her er bare et vildt skud i tågen - kan du ikke blot undlade at køre
  $data2[] = $data[$i]/$row['antal']*100;
  $leg[] = $row['procedurer']." (".$row['antal'].")";

hvis $row['antal'] er nul?
Avatar billede wanze Nybegynder
03. december 2009 - 23:55 #2
Evt. erstatte
  $data2[] = $data[$i]/$row['antal']*100;
med
  $data2[] = ($row['antal']==0)?0:$data[$i]/$row['antal']*100;
Avatar billede acore Ekspert
04. december 2009 - 01:06 #3
Jeg tror, du kan slå dem sammen, så du kun laver et query:

$data = array();
$data2 = array();
$leg = array();
$sql = mysqli_query ($conn, "SELECT procedurer, COUNT(procedurer) AS antal, SUM(resultat='succes') AS succes FROM erfaring_procedurer WHERE user = '$_SESSION[user]' GROUP BY procedurer");
while ($row = mysqli_fetch_array($sql)) {
    $data[] = $row['succes'];
    $data2[] = ($row['antal'] == 0? 0: $row['succes']/$row['antal']*100);
    $leg[] = $row['procedurer']." (".$row['antal'].")";
}

Godt nok ikke testet, men...
Avatar billede hcthorsen Praktikant
04. december 2009 - 11:02 #4
wanze, dit forslag virker ikke. Der ville for øvrigt ikke være noget problem med at indsætte et nul, da det foregår i tælleren. acore, dit forslag virker perfekt:-) Det kan selvfølgelig simplificeres yderligere, da jeg nu kun laver en søgning. Takker mange gange.
Avatar billede wanze Nybegynder
04. december 2009 - 12:47 #5
Så vidt jeg kan se er så er $row['antal'] nævner i $data2[] = $data[$i]/$row['antal']*100;.
Avatar billede hcthorsen Praktikant
04. december 2009 - 13:48 #6
Det er korrekt. Men det er jo den  $row['antal'] der kommer fra anden søgning, der aldrig vil være tom. Det er kun når man bruger forudsætningen AND resultat='succes' i første søgning (som indgår i tælleren) at søgningen kan blive tom.

Procent succes = (Antal succes / Total) x 100
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
Computerworld tilbyder specialiserede kurser i database-management

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