Werte erhöhen ( höchster Wert + 1 )

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

  • Werte erhöhen ( höchster Wert + 1 )

    Hi,

    in eurem Tutorial "Wie schreibt man ein Forum mit PHP und Mysql" wird folgender Befehl ausgeführt:

    PHP-Code:
    //nun brauchen wir noch die neue ID des Threads, um sie in answers einzutragen

    $res =  mysql_query("select max(id) AS max from threads"); 
    $row =  mysql_fetch_array($res); 
    $thread_id $row["max"]; 

    //so nun schreiben wir den eigentlichen Beitrag in die DB 
     
    mysql_query("insert into answers set
    text='
    $text',
    topic='
    $topic',
    user='
    $name',
    fid='
    $fid',
    tid='
    $thread_id',
    created=now()"
    ); 
    Gibt es keine Möglichkeit innerhalb EINER Abfrage den höchsten Wert zu ermitteln und um 1 zu erhöhen?

    Bei dieser Methode würd ja theoretisch die Möglichkeit bestehen, dass die max(id) 2 mal zur gleichen Zeit ausgelesen wird.. ?

    gruß, matze

    EDIT:
    umbruch by Abraxax
    Zuletzt geändert von Abraxax; 20.05.2004, 16:06.

  • #2
    naja. das mit der MAX(id) ist auch nicht sooo ganz sauber. sauberer geht es mit LAST_INSERT_ID(). und das funktioniert dann auch mit nur einer query. ;-)

    Code:
    INSERT INTO threads SET
        name = 'dummy'
        
    # die id wurde nun via auto_inc vergeben und
    # kann mit LAST_INSERT_ID() verwendet werden.
    
    
    INSERT INTO answers set
        text    = '$text',
        topic   = '$topic',
        user    = '$name',
        fid     = '$fid',
        tid     = LAST_INSERT_ID(),
        created = NOW()
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      LAST_INSERT_ID([ausdruck])
      Gibt den letzten automatisch erzeugten Wert zurück, der in eine AUTO_INCREMENT-Spalte eingefügt wurde.
      Hab mal ein bisschen nachgelesen ( http://www.mysql.de/doc/de/Miscellaneous_functions.html ) ...

      Das ist aber doch auch nicht ganz Sinn der Sache. Dadurch erhalte ich ja "(post)id" = "threadid" ...

      Ich will ja nicht den letzten Wert der per autoincrement eingefügt wurde (postid), sondern threadid+1

      Kommentar


      • #4
        schon klar was du willst. threadid ist aber auch auto_inc.

        und wenn du einen neuen thread anlegst, speicherst du ja bitte erst den thread. und dann brauchst du die automatisch generierte id. -> LAST_INSERT_ID()

        jetzt kannst du den post dazu auch noch abspeichern. MIT der id von eben.

        wenn du nur einen neuen post zu einem thread hinzufügen willst, ist dir die threadid doch schon bekannt. denn du antwortest ja auch einen thread/'post im thread'.
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          Meine thread_id ist leider nicht auto_inc ...

          Ich habe lediglich eine Tabelle für Threads/Posts. Die ersten Posts in einem Thread werden per "fistpost = 1" deklariert.

          Jetzt muss ich entweder wieder die Tabellenstruktur ändern, oder es belassen wie es ist.

          Das mit dem Antworten ist klar, dabei gibts ja keine Probleme!

          Kommentar

          Lädt...
          X