Lothar: id des letzen eintrags

hallo!

ich habe folgendes problem. ich möchte in der variable $news_id (unter $sqlkommando) die id haben, die der zuletzt erstellte eintrag (direkt darüber) hat....kann man das irgendwie machen?? ich habe auf jeden fall kein blassen schimmer.

$connect = mysql_connect("$DB_HOST", "$DB_USER", "$DB_PW") or die (mysql_error());
mysql_select_db("$DB_NAME") or die (mysql_error());

$query = "INSERT INTO news (topic, date, news, autor, autorid) VALUES ('$topic', '$date', '$news', '$autor', '$autorid')";
$queryin = mysql_query($query);

$sqlkommando = "CREATE TABLE news\_comments\_$news\_id (
       id int(11) NOT NULL auto_increment,
       name varchar(255) NOT NULL default '',
       message text NOT NULL,
       PRIMARY KEY  (id)
      )";

ich wäre furchtbar dankbar, wenn mit jemand weiterhelfen kann...
bis dahin danke,

lothar

  1. Holladiewaldfee,

    ich habe folgendes problem. ich möchte in der variable $news_id (unter $sqlkommando) die id haben, die der zuletzt erstellte eintrag (direkt darüber) hat....kann man das irgendwie machen?? ich habe auf jeden fall kein blassen schimmer.

    LAST_INSERT_ID() sollte Dein Problem lösen.

    Ciao,

    Harry

    --
      Bald kommt die Waldfee ... (Projektphase: Planung)
      Bis dahin:
      http://harry.ilo.de/projekte/berge/
    1. Holladiewaldfee,

      ich habe folgendes problem. ich möchte in der variable $news_id (unter $sqlkommando) die id haben, die der zuletzt erstellte eintrag (direkt darüber) hat....kann man das irgendwie machen?? ich habe auf jeden fall kein blassen schimmer.

      LAST_INSERT_ID() sollte Dein Problem lösen.

      Warum?
      Wenn es sich um MySql handelt und die ID ein Autoincrement hat, sollte eher "....max(id)..." helfen.

      Gruß
      Reiner

      1. Moin!

        LAST_INSERT_ID() sollte Dein Problem lösen.

        Warum?
        Wenn es sich um MySql handelt und die ID ein Autoincrement hat, sollte eher "....max(id)..." helfen.

        Nein. max(ID) selektiert die zu diesem Zeitpunkt maximale ID. Das kann aber (da ja parallel mehrere Einträge gemacht werden können) eine ganz ander ID sein, als dem in diesem Skript gemachten Eintrag zugeordnet wurde.

        LAST_INSERT_ID() gibt es sowohl als SQL-Befehl, als auch als PHP-Befehl, und damit erhält man GARANTIERT die durch die vorhergehende INSERT-Operation erzeugte neue ID. Diese Zuordnung orientiert sich an der Datenbank-Connection und wird durch andere Operationen paralleler Skripte nicht beeinflusst. Damit bist du in jedem Falle SICHER, dass deine ID tatsächlich dem gerade eben erzeugten Datensatz entspricht.

        - Sven Rautenberg

        1. Hello,

          LAST_INSERT_ID() sollte Dein Problem lösen.

          Warum?
          Wenn es sich um MySql handelt und die ID ein Autoincrement hat, sollte eher "....max(id)..." helfen.

          Nein. max(ID) selektiert die zu diesem Zeitpunkt maximale ID. Das kann aber (da ja parallel mehrere Einträge gemacht werden können) eine ganz ander ID sein, als dem in diesem Skript gemachten Eintrag zugeordnet wurde.

          LAST_INSERT_ID() gibt es sowohl als SQL-Befehl, als auch als PHP-Befehl, und damit erhält man GARANTIERT die durch die vorhergehende INSERT-Operation erzeugte neue ID. Diese Zuordnung orientiert sich an der Datenbank-Connection und wird durch andere Operationen paralleler Skripte nicht beeinflusst. Damit bist du in jedem Falle SICHER, dass deine ID tatsächlich dem gerade eben erzeugten Datensatz entspricht.

          Man erhält Sie uach erst NACH dem Insert zurück. Hier geistert häufig die Vorstellung herum, dass man die neue ID (bzw. die bisher letzte) bereits VOR dem Insert bekommen könnte. Das ist aber aus Gründen der Serialisierung konkurrierender Prozesse nicht möglich. Deutlich wird das, wenn man sich unseren Experimentierbaukasten http://forum.de.selfhtml.org/archiv/2004/5/82138/ mal aufmerksam anschaut. Da kann man sozusagen "reinschauen" in die Datenbankfunktionsweise.

          Irgendwann wird er wohl auch mal fortgeführt werden.

          Harzliche Grüße aus http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
  2. Moin!

    $sqlkommando = "CREATE TABLE news\_comments\_$news\_id

    Daumenregel: Wann immer dein Datenbankdesign das ständige Neuanlegen numerierter Tabellen identischen Inhalts erfordert, machst du garantiert irgendwas ganz furchtbar falsch!

    In deinem Fall sollte es vollkommen genügen, einfach EINE EINZIGE Tabelle mit allen deinen Spalten anzulegen, die du auch jeder numerierten Tabelle gegeben hättest, und zusätzlich noch eine weitere SPALTE mit der News-ID (also Typ INT oder BIGINT - je nachdem, welchen Typ die ID in deiner ersten Tabelle hat).

    Die Datenbank wird es dir durch bessere Performance danken, und außerdem hast du einfach bessere Möglichkeiten, Abfragen auf deine Gesamtsammlung aller News zu machen, bzw. diese mit anderen Tabellen zu verknüpfen.

    - Sven Rautenberg

  3. Hello,

    ...das geht sogar mit Flatfiles *gg*
    Wenn Du mal viel Zeit hast, leis Dir mal die Diskussion durch http://forum.de.selfhtml.org/archiv/2004/5/82138/

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau