Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Zählen innerhalb der WHILE-Schleife

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Zählen innerhalb der WHILE-Schleife

    Hi Leute ich hab ein kleines Problem.
    ich habe in meiner MySQL-DB eine Tabelle die so ähnlich aussieht wie das Beispiel.

    ..MA-NR.......z0700........z0715.......z0730.......z074 5 ---> bis z1845
    *-------***-------***-------***-------***-------*
    | .0015.....|.............|......1......|......1.... ..|............|
    *---------*---------*--------- *----------*--------*

    Folgendes Problem:

    ich brauche die Anzahl der Einsen in einer bestimmten Zeile.
    Das Abrufen und die generelle Ausgabe der Daten ist kein Problem.
    Habe schon versucht mit das Ergebniss der Abfrage in ein array schreiben zu lassen (mysql_fetch_array & mysql_fetch_objekt) und diese Inhalte zählen zu lassen aber das kalppt alles nicht.

    Die Abfrage pro Mitarbeiter wird dynamisch mit Hilfe einer FOR-Schleife erzeugt.

    ----------------------------------------------------------------
    PHP-Code:
    $sqlA "SELECT $var FROM t16 WHERE $var='1' AND ma=$maNR AND wochentag='Montag'";
    $resultA mysql_query($sqlA);
    while(
    $row=mysql_fetch_object($resultA))
    {
    $var=$row->$var;
    echo 
    $var.'<br>';

    ------------------------------------------------------------

    Bis hier hin kein Problem. Die Daten werden abgefragt und ausgegeben.

    Aber wie bekomme ich es hin, das mir die gesamtzahl der Zellen ausgegeben wird in denen eine eins steht (je Zeile, also pro MA) ???

    Ich habe schon verschiedene Tips aus dem Net versucht aber alle bringen nur Mist als Ergebniss oder listen wie oben nur die Einzelwerte auf.

    Wäre sehr dankbar wenn mir jemand helfen kann.

    Gruß PhilCGN

  • #2
    ich würde die Tabelle normalisieren..

    Steht da nur eine 1 oder nichts drin?

    Kommentar


    • #3
      btw, dein Code sieht komisch aus, das ist sicher nicht gut durchdacht...

      Kommentar


      • #4
        In der Tabelle können noch andere Werte z.B. "u" für Urlaub oder "k" für Krank stehen. Darum sollen ja nur die Zellen gezählt werden, in denen eine 1 steht. Was verstehst Du denn unter normalisieren?

        Sieht komisch aus? *g*

        Liegt vielleicht daran das die Abfrage an sich bzw. $var dynamisch durch eine FOR-Schleife generiert wird. Aber wie gesagt es funktioniert bis da hin.

        Kommentar


        • #5
          Na normalisieren eben. Funktionieren ist eine Sache, gute Struktur eine andere.

          Du gibst in deinem Code aber nicht eine ganze Zeile Deiner Tabele aus sondern nur ein Feld. Ergo kannst Du auch dort nicht die einsen zählen

          Kommentar


          • #6
            Zitat von PhilCGN Beitrag anzeigen
            Liegt vielleicht daran das die Abfrage an sich bzw. $var dynamisch durch eine FOR-Schleife generiert wird. Aber wie gesagt es funktioniert bis da hin.
            Haste hier schon mal daran gedacht dass Du ne menge unnötiger Queries erzeugst und an Deine DB schickst?

            Kommentar


            • #7
              PHP ist also in der Lage nur die Zellen aus zu geben in denen eine 1 steht aber nicht in der Lage die anzahl dieser Zellen innerhalb einer Zeile zu zählen ????

              Kommentar


              • #8
                Durch die for-schleife habe die Anzahl der abfragen sogar um einiges verringert. Zudem müßte ich sonst für jede Spalte von z0700 bis z1845 eine gesonderte Abfrage schreiben.

                Die Tipperei wollte ich mir eig. ersparen..

                Kommentar


                • #9
                  deswegen ja normalisieren. Deine Abfragemethodik ist nicht wirklich gut. Das siehst Du schon an deinem ersten Problem...
                  btw. wäre mehr code hilfreicher...

                  Kommentar


                  • #10
                    Hier die Gesamte Abfrage:
                    PHP-Code:
                    //Abfrage Mitarbeiter-Nr.
                    $anfrage "SELECT maNR FROM t16 WHERE wochentag='Montag' ORDER BY maNR ASC";
                    $ergebnis mysql_query($anfrage);
                    while(
                    $row=mysql_fetch_object($ergebnis))
                    {
                    $maNR=$row->maNR ;

                    // Anzahl der Arbeitsstunden /pro woche / Je MA
                     
                    for($u=700;$u<=1845;$u++)
                     {
                     if(
                    $u<1000){ $var='z0'.$u; }
                     else{ 
                    $var='z'.$u; }

                    $varK=substr($var,-2,2);
                     if(
                    $varK=='00'||$varK=='15'||$varK=='30'||$varK=='45')
                     {

                    $sqlA "SELECT $var FROM t16 WHERE $var='1' AND ma=$maNR AND wochentag='Montag'";
                    $resultA mysql_query($sqlA);
                    while(
                    $row=mysql_fetch_object($resultA))
                    {
                    $var=$row->$var;
                    echo 
                    $var.'<br>';
                    }

                    }
                    }

                    Kommentar


                    • #11
                      Oje das is ja mal ein schönder code, Du erzeugst ja ne menge overhead
                      for($u=700;$u<=1845;$u++)
                      {
                      hier erzeugst Du 1000 Variablen mal Anzahl mitarbeiter

                      Kommentar


                      • #12
                        mal abgesehen von den mehreren 1000 Abfragen, die Du an die DB schickst

                        Kommentar


                        • #13
                          $varK=substr($var,-2,2);
                          if($varK=='00'||$varK=='15'||$varK=='30'||$varK==' 45')
                          {

                          damit werden die Abfragen ja reduziert auf die exaxte Anzahl der abzufragenden Zellen. Also werden lediglich 28 Zellen (mit od. ohne 1) je MA abgefragt

                          Kommentar


                          • #14
                            also je MA die Zellen z0700 - z1845.
                            Also keine 1000 Abfragen pro MA.

                            Kommentar


                            • #15
                              ja hab ich auch grad gesehen ist aber trotzdem unnötig alles was Du da machst.

                              $sql = "SELECT * FROM t16 WHERE wochentag='Montag' ORDER BY maNR ASC";// wobei SELECT * FROM nicht gut ist...
                              $rs = mysql_query($sql)or die(mysql_error());
                              while($row = mysql_fetch_assoc($rs)){
                              $sum = 0;
                              foreach($row as $k=>$v){
                              echo $k.':'.$v.'<br>';
                              if($v==1){
                              $sum += $v;
                              }
                              }
                              echo $sum.'<br><br>'; // hier steht jetzt die Summe der 1 aus deiner Zeile drin...
                              }
                              mysql_free_result($rs);

                              Kommentar

                              Lädt...
                              X