Kontostand abfragen

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

  • Kontostand abfragen

    Hallo,

    ich lasse mir mit folgendem Code, den Kontostand eines Mitgliedes ausgeben:

    PHP-Code:
    $abfrage "SELECT nickname, date_format(datum, '%d.%m.%Y') AS datum, verwendung, grund, betrag
                     FROM konto where nickname='" 
    $_POST['auswahl'] . "'";
    $ergebnis mysql_query($abfrage);
    $result mysql_query("SELECT SUM(betrag) as plus FROM konto
                           where nickname='" 
    $_POST['auswahl'] . "' AND typ='Einnahme'");
    $row=mysql_fetch_object($result);
    $summe1 $row->plus;
    $result mysql_query("SELECT SUM(betrag) as minus FROM konto
                           where nickname='" 
    $_POST['auswahl'] . "' AND typ='Ausgabe'");
    $row=mysql_fetch_object($result);
    $summe2 $row->minus;
    $diff$summe1-$summe2;
    echo 
    "<tr><td class='links'><strong>Einnahmen</strong></td>";
    echo 
    "<td class='mitte3'><strong>";
    echo 
    $summe1;
    echo 
    "</strong></td><td class='rechts'><strong>Euro</strong></td></tr>";
    echo 
    "<tr><td class='links'><strong>Ausgaben</strong></td>";
    echo 
    "<td class='mitte3'><strong>";
    echo 
    $summe2;
    echo 
    "</strong></td><td class='rechts'><strong>Euro</strong></td></tr>";
    echo 
    "<tr><td class='links'><strong>Kontostand</strong></td>";
    echo 
    "<td class='mitte3'><strong>";
    echo 
    $diff;
    echo 
    "</strong></td><td class='rechts'><strong>Euro</strong></td></tr>"
    Nun möchte ich mir eine Liste ausgeben lassen, wo die Kontostände aller Mitglieder aufgelistet werden.
    Versucht habe ich bis jetzt:

    PHP-Code:
    $abfrage "SELECT nickname, date_format(datum, '%d.%m.%Y') AS datum, verwendung, grund, betrag
                  FROM konto GROUP BY nickname"
    ;
    $ergebnis mysql_query($abfrage);
    $result mysql_query("SELECT SUM(betrag) as plus FROM konto
                           WHERE typ='Einnahme' GROUP BY nickname"
    );
    $row=mysql_fetch_object($result);
    $summe1 $row->plus;
    $result mysql_query("SELECT SUM(betrag) as minus FROM konto
                           WHERE typ='Ausgabe' GROUP BY nickname"
    );
    $row=mysql_fetch_object($result);
    $summe2 $row->minus;
    $diff$summe1-$summe2;
    while (
    $row mysql_fetch_object($ergebnis))
    {      
    echo 
    "<tr><td class='links'>";
    echo 
    $row -> nickname;
    echo 
    "</td><td class='mitte3'>";
    echo 
    $summe1;
    echo 
    "</td><td class='rechts'>Euro</td></tr>";
    }
    ?> 
    Nun wird aber bei jedem Mitglied der gleiche Kontostand angezeigt.

    Was muss geändert werden, damit bei jedem Mitglied der richtige Kontostand angezeigt wird?


    LG Sven

  • #2
    Code:
    $summe2 = $row->minus; 
    $diff= $summe1-$summe2;
    Muss innerhalb der while-schleife gesetzt werden da sonst nur einmal der Betrag errechnet wird und dann nicht wieder verändert wird.

    Somit hast du den ersten Kontostand aus der DB bei jedem Mitglied

    Gruß
    Thora

    Kommentar


    • #3
      Hallo,

      wenn ich das in die While-Schleife mit einbaue, dauert die Ausführung des Scriptes länger,
      und es wird bei jedem Mitglied, immer noch der gleiche Kontostand angezeigt.


      LG Sven

      Kommentar


      • #4
        Code herzeigen - wir können nicht immer raten, was die Leute verbocken, wenn sie versuchen Ratschläge zu befolgen ...
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Hallo,

          ich habe es so versucht:

          PHP-Code:
                $abfrage "SELECT nickname, date_format(datum, '%d.%m.%Y') AS datum, verwendung, grund, betrag
                            FROM konto GROUP BY nickname"
          ;
                
          $ergebnis mysql_query($abfrage);
                
          $result mysql_query("SELECT nickname, SUM(betrag) as plus FROM konto
                                       WHERE typ='Einnahme' GROUP BY nickname"
          );
                
          $row=mysql_fetch_object($result);

                
          $result mysql_query("SELECT nickname, SUM(betrag) as minus FROM konto
                                       WHERE typ='Ausgabe' GROUP BY nickname"
          );
                
          $row=mysql_fetch_object($result);
                
                
          $platz 0;
                while (
          $row mysql_fetch_object($ergebnis))
                {
                
          $summe1 $row->plus;          
                
          $summe2 $row->minus;
                
          $diff$summe1-$summe2;
                echo 
          "<tr><td class='links'>";
                echo 
          $platz $platz 1;  
                echo 
          "</td><td class='mitte1'>";
                echo 
          $row -> nickname;
                echo 
          "</td><td class='mitte2'>";
                echo 
          $diff;
                echo 
          "</td><td class='rechts'>Euro</td></tr>";          } 
          Und auch so:

          PHP-Code:
                $abfrage "SELECT nickname, date_format(datum, '%d.%m.%Y') AS datum, verwendung, grund, betrag
                            FROM konto GROUP BY nickname"
          ;
                
          $ergebnis mysql_query($abfrage);
                
          $platz 0;
                while (
          $row mysql_fetch_object($ergebnis))
                {
                
          $result mysql_query("SELECT nickname, SUM(betrag) as plus FROM konto
                                       WHERE typ='Einnahme' GROUP BY nickname"
          );
                
          $row=mysql_fetch_object($result);
                
          $summe1 $row->plus;
                
          $result mysql_query("SELECT nickname, SUM(betrag) as minus FROM konto
                                       WHERE typ='Ausgabe' GROUP BY nickname"
          );
                
          $row=mysql_fetch_object($result);          
                
          $summe2 $row->minus;
                
          $diff$summe1-$summe2;
                echo 
          "<tr><td class='links'>";
                echo 
          $platz $platz 1;  
                echo 
          "</td><td class='mitte1'>";
                echo 
          $row -> nickname;
                echo 
          "</td><td class='mitte2'>";
                echo 
          $diff;
                echo 
          "</td><td class='rechts'>Euro</td></tr>";          } 

          LG Sven

          Kommentar


          • #6
            SQL-Abfragen in Schleifen sind ganz böse - da ist klar, dass dabei die Performance in den Keller geht.

            Die Ermittlung von plus und minus kannst du auf jeden Fall in einer Abfrage vereinen, in dem du auch noch nach typ gruppierst.

            Und bist du an den einzelnen Daten, die die erste Abfrage liefert, überhaupt interessiert in diesem Fall?
            Wenn ja - beschäftige dich mit JOINs, http://aktuell.de.selfhtml.org/artikel/datenbanken/
            Wenn nein - dann weg damit.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar

            Lädt...
            X