zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden MySQL: Nächste auto-increment-ID herausfinden

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 01.01.2008, 20:46
Benutzerbild von fox
fox fox ist offline
Erfahrener Benutzer
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 11.09.2006
Beiträge: 1.008
fox sorgt für eine eindrucksvolle Atmosphärefox sorgt für eine eindrucksvolle Atmosphäre
Standard MySQL: Nächste auto-increment-ID herausfinden

Hallo,

es gibt ja mehrere Wege, den nächsten, bzw. letzten auto-increment-Wert herauszufinden. Die Frage ist nun - welchen benutzt man am besten?

Möglichkeit 1: Erst einfügen und dann mit mysql_insert_id() letzten Wert herausfinden.
Nachteil: Falls die ID mit in eine andere Spalte eingefügt werden muss muss nachträglich noch ein UPDATE erfolgen:

PHP-Code:
mysql_query ('INSERT INTO table (...) VALUES (...)');

$id mysql_insert_id ($conn);
mysql_query ("UPDATE table SET irgendeine_spalte='" $id "_und_noch_was' WHERE ..."); 

Möglichkeit 2: Den letzten auto-increment-Wert auslesen und einfach hochzählen. Frage: Ist hier die ID eindeutig? Wenn ein Datensatz eingegeben und wieder gelöscht wird (ID:5) - dann ist die höchste ID die des letzten Eintrages - also z.B. 4 - und der nächste Datensatz erhält als ID 5 - somit kann eine ID doppelt vorkommen.

PHP-Code:
$result mysql_query ('SELECT MAX(id) AS last_id FROM table');
$result mysql_fetch_assoc ($result);
$id $result['last_id'] + 1

Möglichkeit 3: Den nächsten auto-increment-Wert mittels SHOW TABLE STATUS auslesen.

PHP-Code:
$result mysql_query ("SHOW TABLE STATUS FROM table LIKE 'Auto_increment'"); 
Ich befürchte aber, dass diese Methode recht langsam ist...


Was würdet ihr mir hier empfehlen? Ich tendiere zur letzten Methode - aber wie sieht das mit der Performance aus?
__________________
:)
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 01.01.2008, 21:49
Benutzer
neuer user
 
Registriert seit: 11.10.2006
Beiträge: 73
Gizmor befindet sich auf einem aufstrebenden Ast
Standard

wo soll denn der sinn sein, das die ID in der selben Tabelle zwei mal vorhanden sein soll?
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 01.01.2008, 22:11
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 07.04.2007
Beiträge: 311
ct2oo4 befindet sich auf einem aufstrebenden Ast
Standard

Frage zu 2.: Warum sollte eine ID doppelt vorkommen? siehe deinem Bsp.: Wenn ich die ID = 5 lösche, ist sie nicht mehr belegt, was bedeutet, dass man die wieder belegen kann.
Den Sinn deiner Frage verstehe ich aber nicht.
Gruß
__________________
Mit Zitat antworten
  #4 (permalink)  
Alt 01.01.2008, 23:01
Benutzerbild von mantiz
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.843
mantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz sein
Standard

Möglichkeit 2 würde ich ganz schnell wieder vergessen.

Wenn ein Datensatz per auto-increment die ID 5 erhält, dieser Datensatz dann gelöscht wird und ein neuer Datensatz eingefügt wird, dann liefert max(...) die ID 4, +1 wäre dann 5, aber die ID, die tatsächlich vergeben wird ist die 6, da wäre das Chaos dann perfekt.

Die 3. Möglichkeit wäre evtl. die schönste, allerdings nur, wenn man die Abfrage direkt per Sub-Select in das Query einfügt, da ansonsten ebenfalls Fehler entstehen können, soll heißen, dass die Abfrage nach der nächsten Auto-increment-ID und das einfügen des Datensatzes atomar gestaltet werden muss, damit das funktioniert, daher als Sub-Select.

Bisher hole ich mir die ID immer mit der 1. Möglichkeit und füge diese dann in einem Extra-Statement in eine oder mehrere andere Tabellen ein, wenn ich das brauche.

Frage mich zwar, warum Du die gleiche ID in die selbe Tabelle 2 mal eintragen willst, aber das musst Du wissen.

Ich tendiere also ganz klar zur 1. Variante, oder aber zur 3., aber nur, wenn Abfrage- und Einfüge-Operation atomar gestaltet werden.
Mit Zitat antworten
  #5 (permalink)  
Alt 01.01.2008, 23:04
Benutzerbild von plastiko
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 26.12.2007
Ort: Hannover
Beiträge: 945
plastiko ist ein Lichtblickplastiko ist ein Lichtblickplastiko ist ein Lichtblickplastiko ist ein Lichtblickplastiko ist ein Lichtblick
Standard

[QUOTE=fox;364737]
PHP-Code:
$id $result['last_id'] + 1
Ich bin mir nicht sicher was genau du meinst.
Aber $id enthält eine Zahl die es vielleicht in deiner Tabelle nicht (mehr) gibt.

Brauchst du vielleicht sowas:
WHERE id >= 4
Mit Zitat antworten
  #6 (permalink)  
Alt 01.01.2008, 23:50
Benutzerbild von fox
fox fox ist offline
Erfahrener Benutzer
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 11.09.2006
Beiträge: 1.008
fox sorgt für eine eindrucksvolle Atmosphärefox sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von Gizmor Beitrag anzeigen
wo soll denn der sinn sein, das die ID in der selben Tabelle zwei mal vorhanden sein soll?
Zitat:
Zitat von ct2oo4 Beitrag anzeigen
Frage zu 2.: Warum sollte eine ID doppelt vorkommen? siehe deinem Bsp.: Wenn ich die ID = 5 lösche, ist sie nicht mehr belegt, was bedeutet, dass man die wieder belegen kann.
Den Sinn deiner Frage verstehe ich aber nicht.
Gruß
Stichwort SEO und schönere URLs (es handelt sich um ein Newssystem): Bis jetzt speichere ich die Adressen für die Newseinträge fest in der Datenbank in einer eigenen Spalte. Damit es keine überschneidungen mit den Namen gibt wird vorne die newsID mit rangehängt

Beispiel: example.com/5-newssystem-mit-seo/

Der rote Teil steht in der Datenbank.

Wenn ich mir das so ansehe, ist es wohl fast leichter die Adresse mit mod_rewrite bzw. einer RegExp. zu zerschnipseln und dann in PHP nach der ID den Eintrag zu liefern.


Zitat:
Zitat von mantiz Beitrag anzeigen
Möglichkeit 2 würde ich ganz schnell wieder vergessen.

Wenn ein Datensatz per auto-increment die ID 5 erhält, dieser Datensatz dann gelöscht wird und ein neuer Datensatz eingefügt wird, dann liefert max(...) die ID 4, +1 wäre dann 5, aber die ID, die tatsächlich vergeben wird ist die 6, da wäre das Chaos dann perfekt.
Das waren auch meine Bedenken, die Möglichkeit fällt also weg.

Zitat:
Zitat von mantiz Beitrag anzeigen
Ich tendiere also ganz klar zur 1. Variante, oder aber zur 3., aber nur, wenn Abfrage- und Einfüge-Operation atomar gestaltet werden.
Kannst du bitte genauer erklären, was du mit "atomar gestaltet" meinst?

Zitat:
Zitat von plastiko Beitrag anzeigen
Ich bin mir nicht sicher was genau du meinst.
Aber $id enthält eine Zahl die es vielleicht in deiner Tabelle nicht (mehr) gibt.
Ganz klar, denn der auto-increment-Wert ist IMMER eine Zahl, die in der Tabelle nicht existiert
__________________
:)

Geändert von fox (01.01.2008 um 23:57 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 02.01.2008, 10:38
Benutzerbild von kampfgnom
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 22.11.2006
Ort: Radebeul
Beiträge: 1.808
kampfgnom befindet sich auf einem aufstrebenden Ast
Standard

Ich glaube da kommst du wirklich besser, wenn du einfach per PHP am ende die url zusammensetzt anstatt ne neue Spalte auzumachen.

Die enthält ja letztlich nur Daten die du schon gespeichert hast.
Und wehe das URL-Format wird geändert na viel Spaß wenn du so sagen wir 1000 Einträge hast
__________________
Meine Spielwiese: http://blog.kanedo.net
Ich bei Flickr? Da: Flickr: Fotostream von kanedo-projekt
Für open Source Liebhaber: open Com

Auch ich Zwitschere als @kanedo
Mit Zitat antworten
  #8 (permalink)  
Alt 02.01.2008, 12:40
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.977
protonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblick
Standard

Also einen auto-increment-Wert solltest du nie selber ändern oder eintragen, der Sinn einer solchen ID ist nicht, dass du einen Zähler hast, sondern er soll einen Datensatz spezifisch identifizieren, auch in anderen Tabellen. Deshalb ist die ID, sobald du den Eintrag löscht, nicht mehr frei und sollte auch nicht benutzt werden.
Mit Zitat antworten
  #9 (permalink)  
Alt 02.01.2008, 13:01
Benutzerbild von fox
fox fox ist offline
Erfahrener Benutzer
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 11.09.2006
Beiträge: 1.008
fox sorgt für eine eindrucksvolle Atmosphärefox sorgt für eine eindrucksvolle Atmosphäre
Standard

Okay, vielen dank euch allen
Ich werde das ganze wohl umstellen und die Adresse nicht mehr in der Datenbank speichern.

Zitat:
Zitat von protonenbeschleuniger Beitrag anzeigen
Also einen auto-increment-Wert solltest du nie selber ändern oder eintragen, der Sinn einer solchen ID ist nicht, dass du einen Zähler hast, sondern er soll einen Datensatz spezifisch identifizieren, auch in anderen Tabellen. Deshalb ist die ID, sobald du den Eintrag löscht, nicht mehr frei und sollte auch nicht benutzt werden.
Ich hatte auch nicht vor ihn zu ändern - und es ist ja nur in meinem Sinne, dass die ID pro Datensatz eindeutig ist und nicht zweimal vorkommt Aber das hat sich ja nun erledigt.
__________________
:)
Mit Zitat antworten
Sponsored Links
  #10 (permalink)  
Alt 02.01.2008, 13:29
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.977
protonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblick
Standard

Dann macht aber deine Ausgangsfrage keine Sinn.
Mit Zitat antworten
Sponsored Links
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
IE7 Breitenproblem / Anzeige zu schmal (<div>)? hoi3008 CSS 19 10.02.2011 18:39
z-index hoch, dennoch grafik nicht ganz oben bergg CSS 6 27.10.2010 17:02
rätselhafter Leerraum zwischen Content und Footer im IE jhonnybravo CSS 5 04.03.2010 12:47
IE7 fixing - expandable menu matsie CSS 6 10.04.2008 16:55
CSS Layout im Dreamweaver skurril - online jedoch korrekt cellshade CSS 14 27.08.2007 16:51


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:46 Uhr.