Marcus: addieren von inhalten einer mysql Datenbank

hi leute,
stehe heute etwas neben mir und brauche dringend hilfe!!!

ich hab mir in php und mysql eine stundenerfassung zusammengebastelt.
ich kann auch alles wieder auslesen aber ich kriege es einfach nicht hin die stunden die in der tabelle stehen zu addieren.

kann ich das gleich im select machen, oder muss ich das in php nach dem auslesen zusammen addieren????

danke im voraus
marcus

  1. Hallo!

    kann ich das gleich im select machen, oder muss ich das in php nach dem auslesen zusammen addieren????

    Mit UPDATE kannst Du Tabellen bzw. Datensätze editieren.

    Sagen wir mal, Du möchstet am Montag 5h Stunden dazu rechnen. Keine Ahung, ob das auch mit 5.5 oder 5,5 funktioniert.

    UPDATE stundenzettel SET montag=montag+5 WHERE id=$tag_id;

    mySQL bietet aber eine Menge Funktionen an, Strings bearbeiten, Werte vergleichen etc., die Du im SQL-Statment unterbringen kannt und Dir arbeit mit PHP sparst.

    MfG, André Laugks

    1. Hallo!

      kann ich das gleich im select machen, oder muss ich das in php nach dem auslesen zusammen addieren????

      Mit UPDATE kannst Du Tabellen bzw. Datensätze editieren.

      Sagen wir mal, Du möchstet am Montag 5h Stunden dazu rechnen. Keine Ahung, ob das auch mit 5.5 oder 5,5 funktioniert.

      UPDATE stundenzettel SET montag=montag+5 WHERE id=$tag_id;

      jeder eintrag wird in einem neuen datensatz gespeichert, und ich möchte gerne die datensätze zusammen addieren.

      mySQL bietet aber eine Menge Funktionen an, Strings bearbeiten, Werte vergleichen etc., die Du im SQL-Statment unterbringen kannt und Dir arbeit mit PHP sparst.

      MfG, André Laugks

      1. Wie wäre es mal mit dem PHP manual auf www.php.net ?

        ich sags dir trotzdem wie's geht, zumal ich ja grade jetzt an meiner Seite code:

        mysql_db_query ($MYSQL_DB_NAME, "UPDATE questions SET question="$frage" WHERE id="$id"", $conid);

        dieser Einzeiler ist alles ..

        questions ist die tabelle,   question ist eine Spalte mit ner Frage, und id ist ne spalte, die alles schön durchnummeriert ... ich glaub's erklärt sich von selbst.

        1. Wie wäre es mal mit dem PHP manual auf www.php.net ?

          ich sags dir trotzdem wie's geht, zumal ich ja grade jetzt an meiner Seite code:

          mysql_db_query ($MYSQL_DB_NAME, "UPDATE questions SET question="$frage" WHERE id="$id"", $conid);

          dieser Einzeiler ist alles ..

          questions ist die tabelle,   question ist eine Spalte mit ner Frage, und id ist ne spalte, die alles schön durchnummeriert ... ich glaub's erklärt sich von selbst.

          oops .. sorry, hätte ich ja das wichtigste fast vergessen:
          das was du willst ist in meinem beispiel löschen eines Eintrages.
          dabei müssen sie IDs der nachfolgenden tabellen dekrementiert werden (ich weiss, es gibt da in SQL vorgefertigte funktionen die dies automatisch tun, ist aber fürs beispiel interessant)

          mysql_db_query ($MYSQL_DB_NAME, "DELETE FROM questions WHERE id=$id", $conid);
          mysql_db_query ($MYSQL_DB_NAME, "UPDATE questions SET id=(id-1) WHERE id > $id");

          jo, damit hättest du dann praktisch den wert von allen ids dekrementiert, die danach kommen, sollte sich eigentlich auf dein Beispiel übertragen lassen.

  2. Bin jetzt nit ganz sicher ob Du das meinst:

    select sum(stunden) as summe from tbl_stunden

    nach Tagen sortiert:

    select tag,sum(stunden) as summe from tbl_stunden group by tag

  3. Hallo,
    hab mir soetwas auch mal gecoded.. vielleicht hilft dir mein source etwas:
    ( Werd das ganze teil mal auf sourceforge stellen... )

    <?php

    include('classen/db.php');

    $db = new dbconnect;
    $db->db_connect("work.dp.at", "time", "xxxxx", "xxxxx");

    $today=date("d.m.Y H:i:s");
    $month=date("m");
    $day=date("d");
    $year=date("Y");
    $week=strftime("%U");
    $now=date("U");

    $jobdone=false;

    $db->query("Select come,gone FROM timer WHERE day='$day' AND year='$year' AND month='$month'",1);
    if($db->num_rows(1)>0){
        list($com,$gon)=$db->fetch_row(1);
        if($gon != 0){
            $jobdone=true;
        }
        $cogo="Geht";
        $c=1;
    }else{
        $cogo="Kommt";
        $c=2;
    }

    if(isset($submit)){
        if($c==1){
            $db->query("UPDATE timer SET gone='$now' WHERE day='$day' AND month='$month' AND year='$year'");
        }elseif($c==2){
             $db->query("INSERT INTO timer (come, day, week, month, year) VALUES ('$now','$day','$week','$month','$year')");
        }
    }

    // $c  1 == geht,  2 == kommt //

    // Monats stunden
    $db->query("Select come,gone FROM timer WHERE year='$year' AND month='$month' AND gone!=''");
    if($db->num_rows()>0){
        while(list($coming,$going)=$db->fetch_row()){
            $time=$going-$coming;
            $monthh=$monthh+$time;
        }

    $monthh=round($monthh/3600,2);
    }else{
        $monthh=0;
    }

    // wochen stunden
    $db->query("Select come,gone FROM timer WHERE year='$year' AND week='$week' AND gone!=''");
    if($db->num_rows()>0){
        while(list($coming,$going)=$db->fetch_row()){
            $time=$going-$coming;
            $weekh=$weekh+$time;
        }

    $weekh=round($weekh/3600,2);
    }else{
        $weekh=0;
    }

    ?>
    <form method="post" action="timer.php">
    <input type="hidden" name="com" value="<?php echo $c; ?>">
    <table border="0" cellpadding="10" cellspacing="0" width="400" align="center" bgcolor="#C0C0C0">
        <tr>
            <td colspan="2" align="center"><?php echo $today; ?><br><br><?php if($jobdone){ echo "<b>Du hast für heute eigentlich schon schluss gemacht!</b><br><br>";}?><input type="submit" name="submit" value="<?php echo $cogo; ?>"></td>
        </tr>
        <tr>
            <td align="center">Arbeitsstunden gesamt in diesen Monat:</td><td><?php echo $monthh; ?></td>
        </tr>
        <tr>
            <td align="center">Arbeitsstunden gesamt in dieser Woche:</td><td><?php echo $weekh; ?></td>
        </tr>
    </table>
    </form>

    <h3>Überblick</h3>

    <?php
    // Netto Arbeitszeit berrechnen:
    $feiertage=array("01.01.2001","06.01.2001","16.04.2001","01.05.2001","24.05.2001","04.06.2001","14.06.2001","15.08.2001","26.10.2001","01.11.2001","08.12.2001","25.12.2001","26.12.2001");
    //

    for($i=1;$i!=13;$i++){
            $c=1;
            $urlaub=0;
            $hours=0;
            $tage=array();
            $db->query("SELECT sum((gone - come)/3600), count(id) FROM timer  WHERE month='$i' AND gone!=''",1);
            list($h,$da,)=$db->fetch_row(1);
            $result=mysql_query("SELECT day FROM timer WHERE month='$i'");
            while(list($z)=mysql_fetch_row($result)){ $tage[]=$z; }

    if($da!=0) $durch=round($h/$da,2);

    $month=date("F",mktime(0, 0, 0, $i+1, 0, date("Y")));
            $monthnr=date("m",mktime(0, 0, 0, $i+1, 0, date("Y")));
            $days=date("t",mktime(0, 0, 0, $i+1, 0, date("Y")));
            $today=date("d");

    while($c!=$days){
                $w=date("w",mktime(0, 0, 0, $i, $c, date("Y")));
                $dat=date("d.m.Y",mktime(0, 0, 0, $i, $c, date("Y")));
                $day=date("d",mktime(0, 0, 0, $i, $c, date("Y")));
                if($w!=0 && $w!=6 && !in_array($dat,$feiertage) && !in_array($day,$tage)){
                    if($i==date("m")){
                        if($c<=$today) $urlaub++;
                    }else{
                       $urlaub++;
                    }
                }
                if($w!=0 && $w!=6 && !in_array($dat,$feiertage))  $hours=$hours+7.7;
                $c++;
            }
            if($month=="May") $urlaub=0;
            if($da!=0)
                echo "<a href="timer.php?mg=$i">".$month."</a>  <b>".$h."</b> Stunden ($durch h/Tag bei $da Arbeitstagen), SollStunden: $hours Stunden, Urlaubstage: $urlaub<br>\n";
        }

    echo "<p><a href="timer.php?jahr=2001">Jahresansicht</a> anzeigen</p>";

    if(isset($mg)){
        echo "<img src="bild.php?month=$mg">";
    }

    if(isset($jahr)){
        echo "<img src="bild.php?jahr=$jahr">";
    }

    ?>

    lg
    Ludwig