Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 25

Thema: Rausfinden der nächsten ID über PHP

  1. #1
    Registrierter Benutzer
    Registriert seit
    15.06.2006
    Beiträge
    43

    Rausfinden der nächsten ID über PHP

    Hi leute,

    Ich will gerne ein Newsscript schreiben , hab aber ein Problem!

    Und zwar Folgendes :

    Ich würde gerne die nächste ID raus finden , die Mysql macht. Weil meine MYSQL Tabelle so aussieht

    CREATE TABLE News (
    Author TEXT,
    Inhalt TEXT,
    Datum DATETIME,
    Titel TEXT,
    ID INT AUTO_INCREMENT PRIMARY KEY
    )

    Ich muss dies Rausfinden weil ich diese ID für tabelle news_comment_<ID>

    WIe mach cih das?

  2. #2
    Registrierter Benutzer
    Registriert seit
    17.09.2006
    Ort
    Merzig
    Beiträge
    13

    Cool

    $result=mysql_query("SELECT (max(ID)+1) as maxid FROM news");
    $row=mysql_fetch_array($result);
    echo $row["maxid"];

    Viele Wege führen nach Rom, so z.B. auch:
    $result=mysql_query("SELECT ID FROM as maxid news ORDER BY ID DESC LIMIT 1");

    Man kann aus ID auch ein auto_increment-Feld machen. Dann muß man die ID gar nicht angeben.

    Gruß
    cplinux
    http://www.cplinux.de

  3. #3
    Registrierter Benutzer
    Registriert seit
    15.06.2006
    Beiträge
    43
    Hi , habs mal ausgeprobt und da hab ich irgendwie noch fehler :

    Weg 1 :

    Code:
    $sql_comment_id = " SELECT(max(ID)+1) as maxid FROM News";
    $result_comment_id = mysql_query("SELECT (max(ID)+1) as maxid FROM News") OR die(mysql_error());
    $row = mysql_fetch_array($result_comment_id);
    
    
    
    
    $sql_comment_table = " CREATE TABLE news_comment_".$row['ID']." (
                           Author TEXT,
    					   Titel TEXT,
    					   Inhalt TEXT,
    					   comment_id INT AUTO_INCREMENT PRIMARY KEY
    					   )";

    Er meine dann folgendes :
    Code:
    Notice: Undefined index: ID in /var/www/htdocs/tost/save_news.php on line 14
    Er erstellt dann tabelle : news_comment_

    Wo mach ich was falsch ich seh da kein fehler ...

  4. #4
    Registrierter Benutzer
    Registriert seit
    12.02.2006
    Beiträge
    22
    Hallo,

    ich würde das in eine andere Richtung aufziehen. Ich würde eine Tabelle für die Kommentare machen. In diese Tabelle kommen dann alle Kommentare rein zu jedem Beitrag. Zu jedem Datensatz dann die ID des entsprechenden Beitrages speichern und dass war es schon.

    Der Vorteil: Du hast kein Problem damit die letzte (oder nächste) ID herrauszubekommen, da Du es einfach nicht brauchst.

    Bekommt denn deine Tabelle die Du erstellen willst wirklich die nächste folgende ID? Oder die ID von der zuletzt eingefügten 'News' Zeile? Wenn es die ID der letzten eingetragenen News-Zeile ist mache doch folgendes nach dem Insert der News-Zeile:
    PHP-Code:
       $last_inserted_id mysql_insert_id(); 
    Das sollte es schon gewesen sein. Mein Ansatz wäre jedoch (wie oben geschildert) - sämtliche Kommentare in eine einzige Tabelle zu schreiben und über die ID des News-Beitrages zu 'verlinken'.

    Viele Grüße
    Alexander

  5. #5
    Registrierter Benutzer
    Registriert seit
    15.06.2006
    Beiträge
    43
    Mein System ist folgender massen aufgebau :

    Wenn ich ein Newsbeitrag schreib , brauch ich ja nur eine Zeile für den Beitrag. Will ich aber Comments machen , brauch ich eine neue Tabelle , weil ich grad nicht wüsste wie man in einer Spalte mehrere Mehrere Kommentare lagern kann.
    Daher will ich das so machen , dass wenn ich ein neuen Beitrag schreibe er dann die ID übernimmt die kommt. So kann ich dann besser die kommentare finde.

    €: Ich werde dein vorschlag ausproben. Ich würde aber gerne mein system benutzen. Wenn es kein anderen ausweg gibt mus ich es wohl aufgeben

  6. #6
    Registrierter Benutzer
    Registriert seit
    17.09.2006
    Ort
    Merzig
    Beiträge
    13
    ID ist kein guter Name für eine Spalte.
    Es muß statt $row['ID'] heißen: $row['maxid'], wie in dem SQL angegeben. Dann gehts.
    http://www.cplinux.de

  7. #7
    Registrierter Benutzer
    Registriert seit
    22.08.2002
    Ort
    Nürnberg
    Beiträge
    638
    Zitat Zitat von cplinux Beitrag anzeigen
    $result=mysql_query("SELECT (max(ID)+1) as maxid FROM news");
    $row=mysql_fetch_array($result);
    echo $row["maxid"];
    Das wird nur vorübergehend funktionieren. Nach einiger Zeit, wenn dann die Fehler auftreten weiss man nicht mehr was man damit gewollt hat. Denn wie heisst es so schön:
    Beachten Sie, dass in diesem Fall (wenn die AUTO_INCREMENT-Spalte Teil eines mehrspaltigen Index ist) AUTO_INCREMENT-Werte neu verwendet werden, wenn Sie den Datensatz mit dem höchsten AUTO_INCREMENT-Wert in einer beliebigen Gruppe löschen. Dies gilt auch für MyISAM-Tabellen, bei denen AUTO_INCREMENT-Werte normalerweise nicht wiederverwendet werden.
    Ansonsten gibt es zu Thema sogar ein ganzes Kapitel in der Dokumentation: http://dev.mysql.com/doc/refman/5.1/...increment.html

    Pingu
    Homepage: www.pingu.info

  8. #8
    Registrierter Benutzer
    Registriert seit
    15.06.2006
    Beiträge
    43
    Uuuhhhh..... "as maxid" .... sorry hab nicht genau gelesn *schäm*

  9. #9
    Registrierter Benutzer
    Registriert seit
    15.06.2006
    Beiträge
    43
    Hmmmm..... ich wollte es mal mit
    Code:
    $id = mysql_insert_id();
    ausproben. Es funktioniert auch er erstellt eine tabelle namens news_comment_0.

    Ich hab nur noch ein paar fehler weil er es nicht abspeichern will

  10. #10
    Registrierter Benutzer
    Registriert seit
    12.02.2006
    Beiträge
    22
    Hallo

    ich muss zugeben, dass ich noch nicht ganz verstanden habe warum Du das so machen möchtest. So wie ich das Verstehe hast Du eine Tabelle in die Du Neuigkeiten schreibst. Ausserdem möchtest Du es den Leuten ermöglichen Kommentare zu diesen Neuigkeiten zu hinterlegen. Warum willst Du dann für jede 'Kommentarsammlung' zu einer Neuigkeit eine eigene Tabelle machen? Eine einzige Tabelle reicht vollkommen.

    Tabelle News:
    CREATE TABLE News (
    Author TEXT,
    Inhalt TEXT,
    Datum DATETIME,
    Titel TEXT,
    ID INT AUTO_INCREMENT PRIMARY KEY
    )
    Bsp. Tabelle für Kommentare:
    Code:
    CREATE TABLE news_comment (
    Author TEXT,
    Titel TEXT,
    Inhalt TEXT,
    news_id INT,
    comment_id INT AUTO_INCREMENT PRIMARY KEY
    )
    Die Zuordnung erfolgt über das Feld news_id. Es ist vollkommen egal, ob ein Kommentar nun zur Neuigkeit 1 oder 500 eingetragen wird. Er kommt mit in diese Kommentar-Tabelle rein. Das ganze ist denke ich anderst auch nicht machbar. Stell Dir mal vor Du hast irgendwann wirklich Deine 1000 Einträge. Dann hättest Du ja mindestens 1001 Tabellen in Deiner Datenbank. Da würde ich mich nicht mehr zurecht finden (wollen).

    mysql_insert_id() liefert die zuletzt eingetragene ID zurück. Also führe es am besten direkt nach dem Insert Befehl aus. Ich würde auch den Autoincrement Wert erhöhen (zumindest zum Testen), damit Du sicher gehst, dass $id auch den richtigen Wert hat und nicht durch Zufall 0 anzeigt, weil die Variable nicht gefüllt ist.

    So, nachdem Du nun geduldig meinen Gehirnwäschenachricht gelesenhast zu Deiner eigentlichen Frage ;-). Was genau speichert 'er' denn nicht ab?

    Viele Grüße

  11. #11
    Registrierter Benutzer
    Registriert seit
    15.06.2006
    Beiträge
    43
    Wenn ich versuche das datum mit reinzutun (mit time()) dann kommt das hier :
    Code:
    Column count doesn't match value count at row 1

  12. #12
    Registrierter Benutzer
    Registriert seit
    12.02.2006
    Beiträge
    22
    Kannst Du einen kompletten Insert String als Beispiel zeigen?

  13. #13
    Registrierter Benutzer
    Registriert seit
    15.06.2006
    Beiträge
    43
    Code:
    $sql = " INSERT INTO News
             (Titel, Datum, Author, Inhalt)
    		 VALUES
    		 (".$_POST['titel'].", ".time().", ".$_COOKIE['username'].", ".$_POST['inhalt'].")";

  14. #14
    Registrierter Benutzer
    Registriert seit
    12.02.2006
    Beiträge
    22
    Probier es mal mit:


    PHP-Code:
    $sql "INSERT INTO News 
              (Titel, Datum, Author, Inhalt) 
               VALUES 
              ("
    .$_POST['titel'].", NOW(), ".$_COOKIE['username'].", ".$_POST['inhalt'].")"
    NOW() ist in diesem Fall bestandteil von Mysql und verwendet das aktuelle Serverdatum. Also auch ohne den " angeben.

  15. #15
    Registrierter Benutzer
    Registriert seit
    15.06.2006
    Beiträge
    43
    Komisch ... jetzt kommt :
    Code:
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'forz, asdasd)' at line 4

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •