Avatar billede gubien Nybegynder
20. juli 2008 - 12:07 Der er 8 kommentarer og
1 løsning

Mindre statestik system

Jeg har forsøgt at lave et mindre statestik system, idéen er at den skal samle dato'erne for sig, og så for hver dato smide en total pris under sidste indeværende dato.

Jeg kan dog ikke få det til at fungere som jeg havde forestillet mig. Jeg kan forestille mig jeg skal løbe dato'erne igennem for sig.

Nogle som har en idé om hvad der kan hjælpe?

$dato_cache;
    $dato_liste = mysql_query("SELECT * FROM tabel ORDER BY dato") or die(mysql_error());
    while ($row = mysql_fetch_array($dato_liste))
    {
    $dato_vis = $row["dato"];
   
    $dato_vis = date('d-m-Y', strtotime($dato_vis));
   
    if($dato_vis == $dato_cache)
    {   
    echo "dato ".$dato_vis." Faktura ".$row["faktura"]." Pris ".$row["prize"]."<br/>";
    }
    else
    {
    $query = "SELECT SUM(prize) FROM tabel WHERE dato='2008-07-17' GROUP BY dato";
   
    $result = mysql_query($query) or die(mysql_error());

    $row1 = mysql_fetch_array($result);
       
    echo "Total pris ".$row1['SUM(prize)'];

       
    echo "<br/><br/>";
    echo "dato ".$dato_vis." Faktura ".$row["faktura"]." Pris ".$row["prize"]."<br/>";
    }
    $dato_cache = $dato_vis;
    }
Avatar billede janpolsen Nybegynder
20. juli 2008 - 23:30 #1
Nu skriver du ikke præcis hvad problemet er, men jeg har prøvet at ændre det der lige faldt mig ind og som jeg har forstået din bekskrivelse:

$dato_cache = '';
$first = true;
$dato_liste = mysql_query("SELECT * FROM tabel ORDER BY dato") or die(mysql_error());
while ($row = mysql_fetch_assoc($dato_liste)) {
    $dato_vis = date('Y-m-d', strtotime($row["dato"]));

    if ($dato_vis == $dato_cache || $first) { 
        echo "dato {$dato_vis} Faktura {$row["faktura"]} Pris {$row["prize"]}<br/>";
    } else {
        $query = "SELECT SUM(prize) AS prize_sum FROM tabel WHERE dato='{$dato_cache}'";
        $result = mysql_query($query) or die(mysql_error());
        $row1 = mysql_fetch_assoc($result);
     
        echo "Total pris {$row1['prize_sum']}";
        echo "<br/><br/>";
        echo "dato {$dato_vis} Faktura {$row["faktura"]} Pris {$row["prize"]}<br/>";
    }
    $dato_cache = $dato_vis;
    $first = false;
}
Avatar billede showsource Seniormester
21. juli 2008 - 06:52 #2
Det er vel:
$sql = "SELECT
        SUM(`prize`) as `daytotal`,
        `dato`
        FROM
        `tabel`
        ORDER BY `dato` ASC
        GROUP BY `dato`";

$rows = mysql_query($sql) or die (mysql_error());

    if(mysql_num_rows($rows) > 0) {

        while($vis = mysql_fetch_object($rows)) {
        echo $vis->dato.", ialt ".$vis->daytotal."<br />";
        }

    }

Men er heller ikke helt med på spm. :O)
Avatar billede janpolsen Nybegynder
21. juli 2008 - 09:20 #3
Som jeg læser spørgsmålet, så vil gubien kun have en total pris efter sidste pris for en given dato a la:
    dato 2008-07-01 Faktura xxxx Pris 100.00
    dato 2008-07-01 Faktura xxxy Pris 200.00
    dato 2008-07-01 Faktura xxxz Pris 500.00
    Total pris 800.00

    dato 2008-07-02 Faktura xxyx Pris 200.00
    dato 2008-07-02 Faktura xxyy Pris 300.00
    dato 2008-07-02 Faktura xxyz Pris 400.00
    Total pris 900.00
Avatar billede gubien Nybegynder
21. juli 2008 - 09:30 #4
Janpolsen:

Det er helt korrekt, men sidste totalpris mangler i dit eksempel, jeg kan forestille mig mna skal have den til at kører den while én gang mere for at få det sidste med
Avatar billede janpolsen Nybegynder
21. juli 2008 - 11:31 #5
Wups... Den havde jeg glemt...

Virker det ikke hvis du blot tilføjer linjen (den samme som inde i lykken):

        echo "Total pris {$row1['prize_sum']}";

... til sidst uden for while-lykken?
Avatar billede janpolsen Nybegynder
21. juli 2008 - 11:34 #6
Doh...

Du skal også have følgende med:
        $query = "SELECT SUM(prize) AS prize_sum FROM tabel WHERE dato='{$dato_cache}'";
        $result = mysql_query($query) or die(mysql_error());
        $row1 = mysql_fetch_assoc($result);

Den komplete kode vil være:
$dato_cache = '';
$first = true;
$dato_liste = mysql_query("SELECT * FROM tabel ORDER BY dato") or die(mysql_error());
while ($row = mysql_fetch_assoc($dato_liste)) {
    $dato_vis = date('Y-m-d', strtotime($row["dato"]));

    if ($dato_vis == $dato_cache || $first) {
        echo "dato {$dato_vis} Faktura {$row["faktura"]} Pris {$row["prize"]}<br/>";
    } else {
        $query = "SELECT SUM(prize) AS prize_sum FROM tabel WHERE dato='{$dato_cache}'";
        $result = mysql_query($query) or die(mysql_error());
        $row1 = mysql_fetch_assoc($result);
   
        echo "Total pris {$row1['prize_sum']}";
        echo "<br/><br/>";
        echo "dato {$dato_vis} Faktura {$row["faktura"]} Pris {$row["prize"]}<br/>";
    }
    $dato_cache = $dato_vis;
    $first = false;
}
$query = "SELECT SUM(prize) AS prize_sum FROM tabel WHERE dato='{$dato_cache}'";
$result = mysql_query($query) or die(mysql_error());
$row1 = mysql_fetch_assoc($result);
echo "Total pris {$row1['prize_sum']}";

Men som du nu kan se, så er der en del redudant data. Du bør måske overveje at oprette et array, som bliver fyldt ud fra databasen og så til sidst udskrive dette. Det er i hvert fald en måde jeg godt kan lide at bruge.
Avatar billede showsource Seniormester
21. juli 2008 - 13:02 #7
ehmm, en lidt anden måde måske at gøre det på:

$sql = "SELECT * FROM `tabel` ORDER BY `dato` ASC";

$rows = mysql_query($sql) or die (mysql_error());
$all = mysql_num_rows($rows);

    if($all > 0) {

    $sum = 0;
    $i = 0;

        while($vis = mysql_fetch_object($rows)) {
        $i++;


            if(isset($dag) && $vis->dato != $dag) {
            echo"<hr>Total pris: ". $sum."<hr>";
            $sum = 0;
            }

        echo $vis->dato.", Faktura: ".$vis->faktura.", pris: ".$vis->price."<br />\r\n";
        $sum += $vis->price;
        $dag = $vis->dato;

            if($i == $all) {
            echo"<hr>Total pris: ". $sum."<hr>";
            }

        }

    }

mysql_free_result($rows);
Avatar billede gubien Nybegynder
23. juli 2008 - 21:27 #8
Det ser fandme fint ud med begge forslag ;o) Det gjorde mig en del klogere!

Jeg synes i begge skal have point for indsatsen!
Avatar billede showsource Seniormester
24. juli 2008 - 11:33 #9
Et svar.
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