Dave: Mathematische Aufgabe mit Zahlen aus Datenbank

Hi,

es ist prinzipiell echt simpel: Ich will Daten aus einer Datenbank abfragen und von dieser Zahl dann z. B. "2" abziehen.

Hab ich jetzt so versucht:

$ergebnis = mysql_query("SELECT ranking FROM testtable");
while ($row = mysql_fetch_array ($ergebnis))
{
$berechnung = $row['ranking'] - 2;
echo $berechnung;
}

Es wird also aus der Tabelle 'testtable' die Spalte 'ranking' ausgelesen, wo irgendeine Zahl drinsteht (ranking ist als INT gekennzeichnet). Und dann will ich von der Zahl 2 abziehen und das Ganze in $berechnung schreiben.

Wo ist das Problem?

Grüsse
Dave

  1. lol fast hätte ich vergessen zu beschreiben, wo überhaupt das Prob liegt :P

    Also ich hab ja stehen

    echo $berechnung;

    Und wenn zum Beispiel die Zahl in der Datenbank -2  ist und ich davon 2 abziehen will, steht nachher da:

    -2-2

    statt dessen soll natürlich dann  -4  dort stehen. Das ist also das Problem und das krieg ich nicht hin... wär nett wenn jemand helfen könnte.

    Grüsse
    Dave

    1. Hallo!

      Und wenn zum Beispiel die Zahl in der Datenbank -2  ist

      ist das so? Gebe erstmal nur die DB-Ergebnisse aus. Wie es ausieht bekommst Du 2 Datensätze in denen jeweils 0 steht.

      Grüße
      Andreas

      1. Hallo!

        Und wenn zum Beispiel die Zahl in der Datenbank -2  ist
         ist das so? Gebe erstmal nur die DB-Ergebnisse aus. Wie es ausieht bekommst Du 2 Datensätze in denen jeweils 0 steht.

        Nein, also wenn ich nur $row[ranking] ausgebe, ist der Wert -2, genau wie es in der DB steht.

        Deshalb dachte ich mir ja "hm prima, dann zieh ich von diesen -2 nochmal -2 ab". Aber er führt die Berechnung eben nicht aus, sondern zeigt dann nur -2-2 an...

        Grüsse
        Dave

        1. Hallo,

          wie wärs, wenn Du den String, den du bekommst erstmal wieder in einen int zurückverwandelst?

          $neu = intval($row['ranking'])-2;

          Echo $neu.

          Und außerdem würde ich mysql_fetch_row($ergebnis,MYSQL_ASSOC); schreiben. Das spart bei längerern Ergebnissets echt Zeit, wenn man lein Dopplearry aufbauen lässt.

          Liebe Grüße aus http://www.braunschweig.de

          Tom

          --
          Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
          1. Hi Tom,

            wie wärs, wenn Du den String, den du bekommst erstmal wieder in einen int zurückverwandelst?

            Ich frage mich, warum das überhaupt ein String ist, es gibt auch noch andere Typen, oder?

            Fabian
            [der jetzt wieder in's Schul-Betriebs-Praktikum geht]

          2. Hallo!

            $neu = intval($row['ranking'])-2;

            Aber das machst PHP doch automatisch, oder? Zumindest bei positiven Zahlen.

            Außerdem @Dave: Wieso machst Du eien Schleife wenn es nur ein Datensatz ist?

            Und außerdem würde ich mysql_fetch_row($ergebnis,MYSQL_ASSOC); schreiben.

            oder einfach mysql_fecth_assoc($ergebnis);

            ;-)

            Grüße
            Andreas

            1. Außerdem @Dave: Wieso machst Du eien Schleife wenn es nur ein Datensatz ist?

              Die Schleife ist zwingend notwendig. Bedenke doch nur mal den Fall, daß durch Fehleingabe etc. ein SQL-Statement zusammengesetzt wird, daß kein Ergebnis liefert. Dann erhält man ohne die Schleife einiges an Fehlermeldung. Und komme jetzt nicht mit "@". Das ist sowieso nur was für Leute, die nicht programmieren können.

              1. Hallo!

                Die Schleife ist zwingend notwendig. Bedenke doch nur mal den Fall, daß durch Fehleingabe etc. ein SQL-Statement zusammengesetzt wird, daß kein Ergebnis liefert. Dann erhält man ohne die Schleife einiges an Fehlermeldung. Und komme jetzt nicht mit "@". Das ist sowieso nur was für Leute, die nicht programmieren können.

                Wieso das? Ich will definitiv nicht das andere Leute als ich in meinen Code Einblick haben, was durch Fehlermeldungen leider der Fall ist. Daher vermeide ich wo es nur geht Fehler nach außen auszugeben, wenn das Programm einmal läuft.

                Und zu dem Problem: Wenn Du wissen willst ob 0, 1 oder mehr Zeilen zurückgegeben werden verwende besser mysql_num_rows(), und verwende dessen Ergebnis um drauf entsprechend zu reagieren.

                Grüße
                Andreas

  2. Hallo,
    laß doch die Datenbank die Arbeit machen:

    SELECT ranking-2 FROM testtable
    (Dazu muß ranking integer sein)

    Wenn Du es nach Deinem Schema machen willst, beachte, daß Du alles, was die Datenbank liefert erst in Integer umwandeln mußt.

    Uwe

    1. Hallo!

      Wenn Du es nach Deinem Schema machen willst, beachte, daß Du alles, was die Datenbank liefert erst in Integer umwandeln mußt.

      Seit wann das? Ich lasse viel Zahlen von der DB zurückgeben und rechne sofort damit - hatte damit noch nier Probleme! Auch wen PHP anfangs denkt es sei ein String, sobald dieser im mathematischen Kontext verwendet wird, und der String eine Zahl ist, wird er umgewandelt.

      Und außerdem kann der Fehler IMHO nicht so auftreten wie beschreiben, zumindest nicht mit dem angegebenen Code, denn ohne '' oder "" ist PHP meines Wissens nicht in der Lage 2 Strings aneinanderzuhängen, und das noch ohne "." .
      Mein Tip: Lass die Schleife weg, und gebe das DB-Ergebnis mit var_dump() aus - um zu sehen was da genau ankommt. ODer besser noch, lass die Schleife am Anfang noch stehen, um zu sehen wieviele Schleifendurchläufe passieren!

      Grüße
      Andreas