zeitenauswertung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • zeitenauswertung

    ich hab vor eine zeitenauswertung zu proggen

    meine user tragen an verschiedenen tage arbeitszeiten ein.

    ich möchte eine auflistung aller zeiten des gesamten jahres haben.
    jeweils nen diagramm pro monat

    jedes diagramm hat also 28-31 spalten.

    jede dieser spalte entählt die summer der arbeitsstunden dieses tages.



    wie baue ich das auf?
    wie ermittel ich die entsprechenden tage?
    welche query sollte ich wo verwenden ?
    wo verwende ich welche for/while schleifen


    würde mich über einen groben aufbau freuen.
    danke
    thx Mukraker

  • #2
    tabelle user: user_id, ...
    tabelle tage: tag_id, datum (datetime), feiertag (bool)
    tabelle arbeitszeit mit user_id | tag_id | stunden

    abfrage: JOIN

    tage ermittel:
    01.01.YYYY - 31.12.YYYY
    feiertage sollten bekannt sein, oder?
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      die datenbänke habe ich schon alle *g*

      mir gings um einen kleinen php ansatz
      thx Mukraker

      Kommentar


      • #4
        ein formular mit zwei select-boxen für monat und für jahr, meinetwegen auch eine für beides

        anhand dieses wertes dann ein statement der art
        Code:
        SELECT
        FROM
         LEFT JOIN
          LEFT JOIN
        WHERE
          YEAR(datum=2004 AND MONTH(datum)=1 AND user_id=45
        GROUP BY DAY(datum)
        was meinst du mit php-ansatz?
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          Hier mal meine versuche

          PHP-Code:
          <?php
              
          function zeiten_auflisten() {
                  
          //global vars
                  
          global $tpl;            //smarty
                  
          global $objDB;            //pear
                  
          global $PHP_SELF;
                  global 
          $prefix;
                  
                  
          //Titel
                  
          $interntitel "Mitarbeiterverwaltung";
                  
          //Internmenü
                  
          $imenu "&raquo;<a href=\"".$PHP_SELF."?sek=client&action=new\" class=\"subnavlink\">Neuer Mitarbeiter</a>";
                  
                  
                  
          //monate arr
                  
          $montharr = array('Januar','Februar','März','April','Mai','Juni','July','August','September','Oktober','November','Dezember');
                  
                  
          //ein ganz großes array
                  
          $data = array();
                  
                  
          //monate durchlaufen
                  
          for ($i=1$i<=count($montharr); $i++) {
                      
          //fulldone auf 0
                      
          $fulldone "";
                      
          //akuteller monat
                      
          $data[$i]['month'] = $montharr[$i-1];
                      
          //anzahl tage des monaths
                      
          $maxday date('t'mktime(0,0,0,$i,1,2004));
                      
          //DB holen
                      
          $sql "SELECT
                                  duration
                              FROM
                                  "
          .PREFIX."worksheet
                              WHERE
                                  YEAR(date)='2004' AND
                                  MONTH(date)='"
          .$i."' AND
                                  eid = '7'"
          ;
                      echo 
          "<hr>$sql<hr>";
                      
          //DB query
                      
          $result $objDB->query($sql);    
                      if(
          DB::isError($result)) {        
                          die(
          $result->getMessage());    
                      }
                      
          //stunden zusammenrechnen
                      
                      
          $this->worksheetdata = array();
                      while(
          $row $result->fetchrow(DB_FETCHMODE_ASSOC)) {  
                          
          $this->worksheetdata[] = $row;
                          
          //komplettearbeitszeit addieren
                          
          $fulldone += $row['duration'];
                      }
                      
          $data[$i]['gesduration'] = sec_to_time($fulldone);
                      
          //einzelne tage ausgeben
                      
          for ($k=1;$k<=$maxday;$k++) {
                          
          $data[$i]['days'] = array();
                      }
                  }
                  
          //Templates aufbereiten
                  
          $tpl->assign('interntitel'$interntitel);
                  
          $tpl->assign('imenu'$imenu);
                  
          $tpl->assign('data'$data);
                  
          $tpl->assign('error'$fulldone);
                  
          $this->call_tpl "employee_info.tpl";
              }
          ?>

          Problem: Wie addiere ich die Zeiten für jeden tag ? das wären ja ca 365 query ? kann man das nicht einfacher, schneller lösen ?
          thx Mukraker

          Kommentar


          • #6
            Original geschrieben von mukraker
            Wie addiere ich die Zeiten für jeden tag ? das wären ja ca 365 query ?
            365?

            du wolltest das doch für jeden monat machen oder?


            SELECT SUM(duration) könnte helfen
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              für jeden monat und jeweils für jeden tag!
              thx Mukraker

              Kommentar


              • #8
                mitarbeiter 1 arbeitet im 05.12.03 und 06.12.03 je 8 stunden

                mitarbeiter 2 arbeitet im 05.12.03 6 stunden und am 07.12.03 8 stunden


                du willst jetzt:
                05.12.03 14 stunden
                06.12.03 8 stunden
                07.12.03 8 stunden

                richtig?
                das geht in einem select ohne in php was zusammenzuaddieren (behaupte icheinfach mal *g*)

                willst du zusätzlich noch
                12/03 30 stunden
                dann würde ich ne neue abfrage machen oder in php die oben gelieferten werte zusammenzählen
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  nein
                  das ganze jeweils für einen mitarbeiten

                  mitarbeite 1
                  arbeiten am 01.01.04
                  2 std an projekt 1
                  3 std an projekt 2
                  ---------------
                  Mirarbeiter 1 arbeitet am 01.01.04 gesamt = 5 Std.

                  So möchte ich für jeden Tag des Monats die Gesamtstundenzahel jedes Tages ( hier 5) ausgben lassen

                  letzentlich sollen dass dann mit jedem monat passieren!
                  thx Mukraker

                  Kommentar


                  • #10
                    hast du bei deinem select das duration mal in SUM(duration) geändert?

                    was kommt dann raus?
                    Ich denke, also bin ich. - Einige sind trotzdem...

                    Kommentar


                    • #11
                      die summe eines monats kann ich ohne probleme zusammenrechnen!

                      das funzt !!

                      für die einzelnen stunden der tage dachte ich mir könnte man mit "GROUP BY" arbeiten, doch wie kann ich bei GROUP by auch noch die einzelnen felder die groupiert werden addieren? geht das auch irgendwie mit SUM()?
                      thx Mukraker

                      Kommentar


                      • #12
                        und
                        Code:
                        SELECT
                          SUM(duration) duration, DAY(datum)
                        FROM
                          worksheet
                        WHERE
                           YEAR(datum)=2004 
                          AND 
                           MONTH(datum)=1
                        GROUP BY 
                          DAY(datum)
                        eventuell besser DAYOFMONTH statt DAY
                        Ich denke, also bin ich. - Einige sind trotzdem...

                        Kommentar


                        • #13
                          naisone

                          PHP-Code:
                          <?php
                          <?php

                          class home
                          {

                          ####################################################################


                              
                          function time_auflisten() {
                                  
                          //global vars
                                  
                          global $tpl;            //smarty
                                  
                          global $objDB;            //pear
                                  
                          global $PHP_SELF;
                                  global 
                          $prefix;
                                  
                                  
                          //Titel
                                  
                          $interntitel "Mitarbeiterverwaltung";
                                  
                          //Internmenü
                                  
                          $imenu "&raquo;<a href=\"".$PHP_SELF."?sek=client&action=new\" class=\"subnavlink\">Neuer Mitarbeiter</a>";
                                  
                                  
                                  
                          //monate arr
                                  
                          $montharr = array('Januar','Februar','März','April','Mai','Juni','July','August','September','Oktober','November','Dezember');
                                  
                                  
                          //ein ganz großes array
                                  
                          $data = array();
                                  
                                  
                          //monate durchlaufen
                                  
                          for ($i=1$i<=count($montharr); $i++) {
                                      
                          //fulldone auf 0
                                      
                          $fulldone "";
                                      
                          //akuteller monat
                                      
                          $data[$i]['month'] = $montharr[$i-1];
                                      
                          //anzahl tage des monaths
                                      
                          $maxday date('t'mktime(0,0,0,$i,1,2004));
                                      
                          //DB holen
                                      
                          $sql "SELECT
                                                  duration, wid, date, SUM(duration) as ges
                                              FROM
                                                  "
                          .PREFIX."worksheet
                                              WHERE
                                                  YEAR(date)='2004' AND
                                                  MONTH(date)='"
                          .$i."' AND
                                                  eid = '7'
                                              GROUP BY
                                                  date"
                          ;
                                      echo 
                          "<hr>$sql<hr>";
                                      
                          //DB query
                                      
                          $result $objDB->query($sql);    
                                      if(
                          DB::isError($result)) {        
                                          die(
                          $result->getMessage());    
                                      }
                                      
                          //stunden zusammenrechnen
                                      
                                      
                          $this->worksheetdata = array();
                                      while(
                          $row $result->fetchrow(DB_FETCHMODE_ASSOC)) {  
                                          
                          $this->worksheetdata[] = $row;
                                          
                          //komplettearbeitszeit addieren
                                          
                          $fulldone += $row['duration'];
                                          echo 
                          "<hr><pre>";
                                      
                          print_r ($row);
                                      echo 
                          "</pre><hr>";
                                      }
                                      
                          $data[$i]['gesduration'] = sec_to_time($fulldone);
                                      
                          //einzelne tage ausgeben
                                      
                          for ($k=1;$k<=$maxday;$k++) {
                                          
                          $data[$i]['days'] = array();
                                      }
                                  }
                                  
                                  
                          //Templates aufbereiten
                                  
                          $tpl->assign('interntitel'$interntitel);
                                  
                          $tpl->assign('imenu'$imenu);
                                  
                          $tpl->assign('data'$data);
                                  
                          $tpl->assign('error'$fulldone);
                                  
                          $this->call_tpl "employee_info.tpl";
                              }
                          }
                          ?>
                          thx Mukraker

                          Kommentar


                          • #14
                            PHP-Code:
                            $sql "SELECT
                              SUM(duration) ges, DAYOFMONTH(date)
                            FROM
                              "
                            .PREFIX."worksheet
                            WHERE
                               YEAR(date)='2004' 
                              AND
                               MONTH(date)='"
                            .$i."' 
                              AND
                               eid = '7'
                            GROUP BY
                              DAYOFMONTH(date)"

                            so meinte ich
                            Ich denke, also bin ich. - Einige sind trotzdem...

                            Kommentar


                            • #15
                              nun muss ich nur für jeden monat noch ein array mit 28-31 werten erstellen.

                              doch wie mach ich das, das eigentlich array aus der DB kann ich nicht nehmen, da z.b. an sa, sontag nciht gearbeitet wird dafür müsste ich dann ne 0 haben!
                              thx Mukraker

                              Kommentar

                              Lädt...
                              X