agnes: Problem beim Auslesen eines maximalen Wertes

Hi,

ich lerne gerade mysql und php. Im Moment versuche ich aus einer Tabelle die maximale ID herauszufiltern.

Der Code, mit dem ich das versucht habe:

$result=mysql_query("SELECT MAX(ID) FROM JPL WHERE BRID='" . $_SESSION['BRID'] . "' AND MandantenID='" . $_SESSION['mid'] . "'") OR die(mysql_error());

$row = mysql_fetch_object($result);
echo $row;

Aber ich bekomme die Meldung: Notice: Undefined property: ID in XXX

Kann mir da jemand weiterhelfen?? Ich weiß nicht mehr weiter!

Danke

Agnes

  1. Hello,

    $result=mysql_query("SELECT MAX(ID) FROM JPL WHERE BRID='" . $_SESSION['BRID'] . "' AND MandantenID='" . $_SESSION['mid'] . "'") OR die(mysql_error());
    Aber ich bekomme die Meldung: Notice: Undefined property: ID in XXX

    sieht nach einer PHP-Meldung aus, die sich u.U. auf MAX(ID) bezieht. Voraussetzung dafür wäre allerdings, dass du irgendwo vorher einen Fehler mit Anführungszeichen, Klammern, Semikolon o.ä. gemacht hast. MySQL würde sich anders beschweren...
    Benutzt du einen Editor mit Syntax-Highlighting?

    MfG
    Rouven

    --
    -------------------
    sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
    Eine Bilanz ist wie der Bikini einer Frau. Sie zeigt fast alles, aber verdeckt das Wesentliche  --  Günter Stotz, Regierungsdirektor des baden-württembergischen Wirtschaftsministeriums
  2. echo $begrüßung;

    ich lerne gerade mysql und php. Im Moment versuche ich aus einer Tabelle die maximale ID herauszufiltern.

    Das ist meist entweder unnötig oder berücksichtigt nicht, dass durch parallel laufende Vorgänge bereits eine größere ID erzeugt worden sein kann, als man erwartet. Wenn du die auto_increment-ierte ID des gerade eingefügten Datensatzes haben möchtest, dann verwende die MySQL-Funktion LAST_INSERT_ID() oder unter PHP mysql_insert_id(). Beide Funktionen müssen noch in der gleichen Verbindung aufgerufen werden, in der das INSERT stattfand.

    Wenn du wirklich die größte ID brauchst, begründe das bitte. Vielleicht können wir™ dich noch von diesem vermutlichen Irrweg abbringen.

    $result=mysql_query("SELECT MAX(ID) FROM JPL WHERE BRID='" . $_SESSION['BRID'] . "' AND MandantenID='" . $_SESSION['mid'] . "'") OR die(mysql_error());
    $row = mysql_fetch_object($result);
    echo $row;

    Aber ich bekomme die Meldung: Notice: Undefined property: ID in XXX

    Das ist eine PHP-Fehlermeldung und sie passt nicht zu dem von dir gezeigten Code. Um zu kontrollieren, was in einer komplexen Variablen (Arrays und Objekte) wie $row enthalten ist, reicht kein einfaches echo, da braucht es print_r() oder var_dump(), und am besten ein <pre> vorher, damit die Ausgabe übersichtlicher wird.

    echo "$verabschiedung $name";

    1. Hi,

      ich muss doch noch einmal nachfragen:

      das ist der Code, mit dem ich gestern schon nicht zurecht kam:
      $result=mysql_query("SELECT MAX(ID) FROM JPL WHERE BRID='" . $_SESSION['BRID'] . "' AND MandantenID='" . $_SESSION['mid'] . "' ORDER BY ID ASC") OR die(mysql_error());

      $row = mysql_fetch_object($result);
      print_r($row);
      $r[] = $row;
      print_r($r);

      Ich glaube, ich hab ein Problem mit den arrays: ich hab keinen Schimmer, wie ich nun an den Wert herankomme, der in $row oder in $r steckt. Probiert hab ichs mit
      if ($r[0]=='1226')
      {
        echo "ja  <br />";
      }

      Aber das geht wohl nicht so. Also habe ich im Forum danach gesucht, habe viel gelernt über arrays, aber ich komme trotzdem nicht weiter. Wie komme ich an den Wert, damit ich nachher damit rechen kann? HILFE!!!!

      Liebe Grüße

      Agnes

      1. echo $begrüßung;

        das ist der Code, mit dem ich gestern schon nicht zurecht kam:
        $result=mysql_query("SELECT MAX(ID) FROM JPL WHERE BRID='" . $_SESSION['BRID'] . "' AND MandantenID='" . $_SESSION['mid'] . "' ORDER BY ID ASC") OR die(mysql_error());
        $row = mysql_fetch_object($result);

        Damit bekommst du ein Objekt, kein Array. mysql_fetch_assoc() ergibt das gleiche Ergebnis, aber als Array. Es gibt noch mysql_fetch_array(), aber das braucht/will man nicht, weil das nicht nur die Feldnamen als Schlüssel anlegt, sondern auch noch je ein Element mit der Spaltennummer als Schlüssel.

        print_r($row);

        Ich glaube, ich hab ein Problem mit den arrays: ich hab keinen Schimmer, wie ich nun an den Wert herankomme, der in $row oder in $r steckt. Probiert hab ichs mit

        Deine eine Ergebnisspalte ist ein Ausdruck, dem du keinen Alias-Namen gegeben hast. Die Spalte wird dann nach dem Ausdruck benannt.

        Die Kontrollausgabe ergibt so etwas:

        stdClass Object (
            [MAX(ID)] => zahl
          )

        Nur ist $row->MAX(ID) nicht die passende PHP-Syntax, um an den Wert zu kommen[*]. Du müsstest deine Abfrage um einen Aliasnamen für das Feld erweitern

        SELECT MAX(ID) AS maximalwert FROM ...

        Somit kannst du dann auf

        $row->maximalwert

        zugreifen.
        Wenn du auf mysql_fetch_assoc() umstellst, geht es auch ohne Alias:

        $row['MAX(ID)']

        Aber mit einem Alias sieht das nicht ganz so komisch aus:

        $row['maximalwert']

        Was aber bleibt ist die Frage, warum du den Maximalwert einer ID haben möchtest. Eine ID dient allein zum Identifizieren eines Datensatzes. Du könntest dafür auch eine DSN-Sequenz nehmen statt einer Zahl. Der maximale Wert in einer ID-Spalte darf keine Bedeutung haben, sonst begehst du einen Fehler. Deswegen wiederhole ich noch mal die Frage, wozu du den Maximalwert zu benötigen glaubst.

        [*] Es gäbe die Möglichkeit über variable Variablen. Es ist aber übersichtlicher, den Weg mit dem Alias zu gehen.

        echo "$verabschiedung $name";