Avatar billede dytti Novice
10. november 2009 - 18:35 Der 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.
Avatar billede jaw Nybegynder
10. november 2009 - 18:40 #1
Det umiddelbart nemmeste er vist noget a'la:

$nat = 0;
$middag = 0;
$morgen = 0;

if ($time >= 0) {
  $tid = "Nat";
  $nat++;
}
if ($time > 5) {
  $tid = "Morgen";
  $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";

osv.osv.
men er lidt i tvivl om, om den vil tælle forkert - men du kan jo prøve det...

Så til sidst udskriver du naturligvis bare: echo $nat." gange";
Avatar billede intenz Novice
10. november 2009 - 23:16 #2
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.
Avatar billede intenz Novice
10. november 2009 - 23:16 #3
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. :)
Avatar billede foo85 Novice
11. november 2009 - 16:39 #4
Prøv og se Count commandoen i mySQL - den gør vidst det du skal bruge...

http://www.tizag.com/mysqlTutorial/mysqlcount.php
Avatar billede intenz Novice
11. november 2009 - 17:27 #5
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.
Avatar billede dytti Novice
25. januar 2011 - 11:47 #6
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 :-)
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