Aus MySQL genaue ID bekommen...

theLMF

Mitglied
Ich würde gerne die genaue ID aus einer MySQL-Tabelle auslesen...

Bsp für eine Tabelle:
Vorname | Nachname | ID

Es gibt die Einträge:

Karl | XXX | 1
Johannes | YYY | 2

Wenn ich jetzt den Eintrag mit der ID 2 lösche (per Script oder PhpMyAdmin) lösche, dann ist die ID des nächstens Eintrag trotzdem 3... (obwohl 2 gelöscht wurde)

Ich würde gerne diese 2 (obwohl sie nicht mehr besteht) auslesen...

Denn ich hab das Problem (bei versch. Scripts) dass bei 500 Einträgen, z.b. 5 aktuelle gelöscht werden, die ID dann aber trotzdem mit 501 weitermacht... das möchte ich genre mehr "kontrollieren"
 
das möchte ich genre mehr "kontrollieren"
Dann definier den Primärschlüssel nicht als auto_increment.
Du kannst den zweiten Datensatz auslesen, indem Du in der Abfrage noch nach ID sortierst (ORDER BY id) und dann in einer Schleife jeden einzelnen Datensatz durchläufst:
Code:
$ZaehlerVariable = 1;
while ($rec = mysql_fetch_object($ErgebnisVomQuery))
{
    echo "Datensatz Nummer: " . $ZaehlerVariable . " - ID: " $rec->id;
    $ZaehlerVariable++;
}
 
mal ganz davon abgesehen ist es aber auf jedenfall ratsam, dass die id nicht nochmal neu kommen kann.
nehmen wir mal ein board als beispiel. da gibts dann die tabelle in denen die moderatoren stehen, zumindest die id's von denen. jetzt löscht ein moderator seinen account und ein neuer user meldet sich an und erhält die gleiche id, dann ist er auf einmal moderator. genau das selbe passiert dir dann auch bei comments etc...
 
@socke|bla zustimm
und ich habe noch keinen gefunden der mir
begründen konnte warum die ids die mysql verteilt unbedingt ohne
lücken sein müssen - es gibt ja auch kein grund dafür :)

nur welche dagegen :)
 
hmm ich hab halt mal ein forum gmacht (bin anfänger :D) bei dem ich nen thread erstell, indem ich die letzte id auslese, die um 1 erhöhe und diesen wert unter einer zeile (forumnumber) speicher, mit der ich dann nachher alle ebiträge eines threads auslese...
ne andere lösung hab ich noch nicht

und da hab ich dann gemerkt, dass es zu problemen kommt, wenn ich z.b. nen beitrag lösch, dass der neuste nächste thread dann zwar als id die richtige zahl hat, aber der gleichzeitig gespeicherte beitrag eins weniger...

hehe kompliziert geschrieben...

tjo wie gesagt, für ne bessere lösug bin ich immer zu haben :D

wie wirds z.b. hier gemacht ????
 
für ein forum brauchste erstmal (alles minimum)
3 tabellen:

1. für die user: userid - username
userid ist autoinc.
2. für das thread: tid - tname
tid = threadid (autoinc.)
3. für die beiträge : userid - tid - eintrag

beim eröffnen der threads

$erg= mysql_query("insert into thread set tname='$betreff'",$link);

$newid = mysql_insert_id($erg);

jetzt haben wir die neue id :)

$erg= mysql_query("insert into beitrag set tid='$newid',userid='$userid',eintrag='$eintrag'",$link);

.. als anregung :)
 
und ich habe noch keinen gefunden der mir
begründen konnte warum die ids die mysql verteilt unbedingt ohne
lücken sein müssen - es gibt ja auch kein grund dafür
Kommt drauf an... Vielleicht sieht das leet aus, wenn man in einer nicht relationalen Datenbank einen lückenlosen Primärschlüssel hat. Auch wenn ohne Relationen ein Primärschlüssel sinnlos³ ist. :)
Aber sobald Relationen ins Spiel kommen, sollte man das lieber sein lassen, denn sonst zerfetzt man sich damit schnell mal die ganze Datenbank.
Ich hab zwar nichts gegen Lücken im Primärschlüssel, aber ich mag diesen ganzen auto_increment-Kram nicht. Ich hab lieber selbst Kontrolle darüber, was nachher in meinem Primärschlüssel-Feld für ein Wert steht. Auto_increment hat mir schon oft genug die einfachsten 1:1-Relationen zerrissen. :rolleyes:
 
Original geschrieben von melmager
$erg= mysql_query("insert into thread set tname='$betreff'",$link);

$newid = mysql_insert_id($erg);

jetzt haben wir die neue id :)

$erg= mysql_query("insert into beitrag set tid='$newid',userid='$userid',eintrag='$eintrag'",$link);
so funktionierts dann auch:

mysql_query("insert into thread set tname='$betreff'");

$newid = mysql_insert_id();

jetzt haben wir die neue id :)

mysql_query("insert into beitrag set tid='$newid',userid='$userid',eintrag='$eintrag'");


Ich weiß nicht warum deine Version nicht funktioniert hat - so gings dann auf jedenfall bei mir...
 

Neue Beiträge

Zurück