Stephan: Alle DB Werte addieren

Hallo,

ich habe ein Problem: Er soll alle DB Werte auch mit Komma addieren udn ausgeben, aber das geht mit dem Code nicht:

$summe = 0;
$werte_ges = mysql_query("SELECT * FROM tbl");
while($stand = mysql_fetch_row($werte_ges)) {
$summe += $stand[0];
}

Ich bekomme immer ganze Zahlen :-(

Woran liegt das?

Danke schon mal

Stephan

  1. Hallo,

    ich habe ein Problem: Er soll alle DB Werte auch mit Komma addieren udn ausgeben, aber das geht mit dem Code nicht:

    $summe = 0;
    $werte_ges = mysql_query("SELECT * FROM tbl");
    while($stand = mysql_fetch_row($werte_ges)) {

    echo $stand[0];

    $summe += $stand[0];
    }
    Ich bekomme immer ganze Zahlen :-(

    Ich hab da mal eine Testausgabe eingefügt. Was für Werte werden dort angezeigt? Solche mit Komma als Dezimaltrenner? Solche mit Text, zusätzlich zu den Ziffern?

    Es geht aber einfacher. Annahme: Das Feld, welches summiert werden soll, heißt "wert".

    SELECT SUM(wert) as Summe FROM tbl

    ergibt _einen_ Datensatz mit dem Feld "Summe", welches die Summe enthält.

    viele Grüße

    Axel

    1. Hi,

      danke :-D

      aber wie mache ich das dann?

      So?

      $wert = mysql_query("SELECT SUM(wert) as summe FROM tbl");
      while($stand = mysql_fetch_row($wert)) {
       echo $summe;
      }

      Danke schon mal

      Stephan

      1. Hallo!

        So?
        $wert = mysql_query("SELECT SUM(wert) as summe FROM tbl");
        while($stand = mysql_fetch_row($wert)) {
        echo $summe;
        }

        $stand ist ein Array, Du möchstest den Wert in der 1. Zelle des Arrays haben. Also "echo $summe[0]".

        Beste Grüße
        Viennamade

      2. Hallo,

        $wert = mysql_query("SELECT SUM(wert) as summe FROM tbl") or die("Anfrage fehlgeschlagen: " . mysql_error());
        while($stand = mysql_fetch_row($wert)) {
         echo $stand[0];
        }

        Tipps:
        1. _Immer_ mit Fehlerprüfungen arbeiten. Ich hab Dir eine eingefügt.
        2. http://de3.php.net/manual/de/function.mysql-fetch-array.php
        3. Es kann bei dieser Abfrage nur ein Datensatz zurückkommen. Du kannst Dir das while also sparen. Prüfe aber trotzdem http://de3.php.net/manual/de/function.mysql-num-rows.php, ob _ein_ Datensatz zurückkommt.

        viele Grüße

        Axel

        1. Hi,

          ich habe jetzt Deinen Code eingefügt, aber er gibt mir wieder eine gerade Zahl aus :-(

          Also ich habe folgenden Code:

          $wert = mysql_query("SELECT SUM(wert) as summe FROM tbl WHERE zwei LIKE 'ja'") or die ("Anfrage fehlgeschlagen: " . mysql_error());
          while($stand = mysql_fetch_row($wert)) {
             echo"<b>$stand[0]</b><br>";
          }

          Wieder die gerade zahl :-(

          Wiso?

          Danke schon mal

          Stephan

          PS: In der DB stehen auch Zahlen mit - vorne dran...

          1. Hallo,

            ich habe jetzt Deinen Code eingefügt, aber er gibt mir wieder eine gerade Zahl aus :-(

            Eine ganze Zahl ;-)). Eine gerade ahl ist durch 2 teilbar.

            Also ich habe folgenden Code:

            $wert = mysql_query("SELECT SUM(wert) as summe FROM tbl WHERE zwei LIKE 'ja'") or die ("Anfrage fehlgeschlagen: " . mysql_error());
            while($stand = mysql_fetch_row($wert)) {
               echo"<b>$stand[0]</b><br>";
            }

            LIKE ist langsam. Da Du ohnehin Gleichheit prüfst, wäre

            SELECT SUM(wert) as summe FROM tbl WHERE zwei = 'ja'

            besser.

            Wieder die gerade zahl :-(
            PS: In der DB stehen auch Zahlen mit - vorne dran...

            Welchen Felddatentyp hat das Feld wert? (Das hieß _zufällig_ _wirklich_ so?) Am besten, Du postest mal die Ausgabe von DESCRIBE tbl.
            http://www.mysql.de/doc/de/Getting_information.html

            viele Grüße

            Axel

            1. Hi,

              ich habe jetzt Deinen Code eingefügt, aber er gibt mir wieder eine gerade Zahl aus :-(
              Eine ganze Zahl ;-)). Eine gerade ahl ist durch 2 teilbar.

              OK, eine ganze Zahl :_D

              Also ich habe folgenden Code:

              LIKE ist langsam. Da Du ohnehin Gleichheit prüfst, wäre

              SELECT SUM(wert) as summe FROM tbl WHERE zwei = 'ja'

              besser.

              OK, geändert :-D

              Welchen Felddatentyp hat das Feld wert? (Das hieß _zufällig_ _wirklich_ so?)

              Jup, das Feld hieß echt so :-D und ä naja, ich habe als Datentyp Text genommen...

              Danke schon mal

              Stephan

              1. Hallo,

                Welchen Felddatentyp hat das Feld wert? (Das hieß _zufällig_ _wirklich_ so?)
                Jup, das Feld hieß echt so :-D und ä naja, ich habe als Datentyp Text genommen...

                Aua! Das ist schlecht. Wirklich Text, nicht wenigstens varchar(x)? Lies mal: http://www.mysql.de/doc/de/Storage_requirements.html.

                Kannst Du das noch ändern? Es würde sich ein numerischer Typ anbieten http://www.mysql.de/doc/de/Numeric_types.html Bsp: DECIMAL(5,2) für -999.99 <= wert <= 9999.99.

                Wenn Du das nicht mehr ändern kannst, welche Daten stehen in dem Textfeld? Sind das wirklich nur Ziffern, Dezimalpunkt und Vorzeichen? Oder sind da Kommas als Dezimalzeichen verwendet? Das würde die Ganzzahlsummen erklären. Wenn Du weißt, welche Form die Daten haben, könntest Du nach Deinem ersten Ansatz verfahren, müsstest die Werte aus der Datenbank allerdings vor dem Summieren zunächst in Zahlen konvertieren und dabei die Kommas berücksichtigen. Das ist aber die _schlechteste_ Variante.

                viele Grüße

                Axel

                1. Hi,

                  habs auf Decimal 14,9 geändert, jetzt gehts :-D

                  Danke !!!

                  Stephan