10. november 2009 - 18:35Der er
5 kommentarer og 1 løsning
Tælle værdier
Jeg har en tabel som indeholder timerne i et starttidspunkt.
Disse timer bliver behandlet således: $query = "SELECT starttime, month, year, MAX(orred1vagt), SUM(antalfisk), SUM(nultur) FROM fangst_log WHERE month='jan' GROUP BY starttime"; $result = mysql_query($query); while($row = mysql_fetch_array($result, MYSQL_ASSOC)) { $time="{$row['starttime']} "; $tid="$tidspunkt"; if ($time >= 0) $tid = "Nat"; if ($time > 5) $tid = "Morgen"; if ($time > 9) $tid = "Formiddag"; if ($time >= 12) $tid = "Middag"; if ($time > 13) $tid = "Eftermiddag"; if ($time > 18) $tid = "Aften"; if ($time > 23) $tid = "Nat";
echo "$tid"; echo " $time";
echo "<br>"; } ?>
Det giver flg output: Nat 0 Nat 3 Morgen 8 Middag 12 Eftermiddag 17 Nat 24
Så det virker ok.
Men hvordan tæller jeg tidspunkterne; Nat, formiddag, eftermiddag osv. Altså så resultatet bliver:
Nat = 3 gange Morgen = 1 gang Middag = 1 gang Eftermiddag = 1 gang osv.
Det skal bruges til en statistik, hvor man kan se, hvor mange gange, der f.eks. har været fisket om natten - ud fra et tidspunkt der er tastet ind i en form.
Du bør tælle det baglæns for at sikre, at værdier kun bliver talt en gang, derfor højest først. Brug et array for at undgå for mange variabler.
Når du alligevel kører et array der gemmer tid i en variabel, kan du bruge den. Ved at placeret tælleren i lige før du laver: echo "$tid";
Noget i stil med: if (isset($tidCount[$tid])) $tidCount[$tid]++; else $tidCount[$tid] = 1;
Den vil så lægge til i arrayet hvor $tid = det du har sat den til.
Efter løkken kan du så smide alt dataet ud (hvis det er det du vil) med: foreach ($tidCount as $key => $value) { $gange = ($value == 1) ? "gang" : "gange"; print $key." = ".$value." ".$gange."<br />"; }
$gange variablen er kun til at vise enten "gang" når det kun er en gang eller "gange" hvis det er 0 eller mere end 1 gang. Det kan du fjerne hvis du ikke skal bruge det.
Hov. Bare se bort fra "Du bør tælle det baglæns for at sikre, at værdier kun bliver talt en gang, derfor højest først. Brug et array for at undgå for mange variabler.". Det skrev jeg da jeg ville skrive om en anden løsning. Det er ikke relevant for den løsning jeg skrev. :)
Der er vel ingen grund til at lave flere kald til databasen. Det vil også blive noget grim kode, med alle de IF statements den skal have. Når du alligevel henter det hele ud og der køres en løkke med al indholdet kan du bruge det svar jeg skrev.
Det endte med at jeg lavede en drop down form med værdierne "morgen, formiddag; osv osv"
Det andet blev noget rod. (oversteg mine evner :-)
Synes godt om
Ny brugerNybegynder
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.