Aktuellen ID Wert in anderem Attribut????

A5 Infoschlampe

Erfahrenes Mitglied
Hi,

ich hab mal ne frage und zwar:

meine tabelle besitzt als primary key das feld ID, welches auto increment ist und somit sich immer automatisch um eins erhöht!
und jetzt stellt man sich vor ich füge einen neuen datensatz mit insert an (das problem liegt bei $wert):

------

$name="blabla"

$wert=???????????????

INSERT <tblname> (name,wert) VALUES ($name,$wert)

------

da der PK ja autoincrement ist, bekommt er ne nummer die ich nicht weiss, oder zumindest ohne eure hilfe nicht weiss, das problem dabei ist aber, das der variablen $WERT VORHER, also vor dem insert befehl genaus dieser ID Wert, z.B. 16, zugewiesen werden soll, so dass die tabelle mit werten danach zum beispiel so aussieht:

ID - Name - Wert
------------------------
16 Test 16

also konkret gefragt: was muss $wert zuweisen,damit ich den (nächsten angelegten) id wert zuweisen kann????

Verstanden? hoffe doch :)

Alles klar, thx 4 answer, ciao
 
Wenn Du ein Feld ID hast, dann ist die ganze Sache ja ganz einfach.

Du machst erstmal ein SELECT - Befehl der die ID der letzten vorhandenen Zeile angibt.
Dann rechnest Du einfach per Inkrementoperator eins dazu ($id++) und speicherst diesen Wert als $wert.

Danach kannst Du Deinen INSERT Befehl durchführen und der Wert entspricht dann Deiner ID.
 
danke,
aber darauf bin ich auch schon gekommen - nun stell dir aber vor dein letzter datensatz in der tabelle ist 10. also wäre der nächste 11...(logisch :) ). wenn ich aber nun den 10nten satz lösche steht der letzte satz bei 9, und wenn ich dann nun einen neuen anlege hat er wie gesagt die nummer 11.
mit dem *durchzählen der id's würde ich aber nach einem $wert++; 10 anstatt von 11 erhalten. das ist ja mein problem????!!!!sch...!

da die diferenz ja nicht mehr eins, sondern 2 ist... hmmm weisss da jemand abhilfe????
 
Auch kein Problem :) :

Du machst eine SELECT Abfrage, die alle Datensätze berührt:
PHP:
$sql = "SELECT * FROM tabelle";
$res = mysql_query($sql);
$id = mysql_num_rows($res);
Den Rest dann von oben übernehmen ($wert = $id++;)

Dann ist id die Anzahl der Zeilen in Deiner Tabelle.
Selbst wenn dann eine Zeile gelöscht wird, bekommt er die richtige Nummer zugewiesen.
 
nee, das geht net so !!!

ein auto_increment-Feld speichert sich "intern", was der nächste Wert ist.
Wie Infoschlampe schon richtig sagte: wenn man 10 Datensätze hat, und den 10. löscht bekommt der nächste neu hinzugefügte Datensatz die ID 11 !!! Man hat also 10 Datensätze, aber der letzte hat die ID 11. Auch wenn man mittendrin (z.B. die 5) rauslöscht bleiben die ID's, und der letzte Datensatz hat eine höhere ID als Datensätze vorhanden sind.
So einfach geht's also nicht :(

Ich frag mich aber die ganze Zeit, wozu Du das Ganze brauchst ??? statt dem Feld "wert" kannst Du ja auch gleich "ID" auslesen....

Gruß
Dunsti
 
Ich habe ein ähnliches Problem...

Selbstprogrammiertes News-System:

Kolumne "id" mit auto_increment, die neuen News werden in die Tabelle eingetragen mit der nächsten id, wenn ich eine News lösche ist die id-Reihe unterbrochen.

Nun möchte ich auf der Startseite 5 News ausgeben. Kein Problem:

PHP:
$max = $zaehler + 5;
(...)
while($news = mysql_fetch_array($ergebnisnews) AND $zaehler <= $max)

Nun - wenn man aber ins News-Archiv will, sollten auch 5 News pro Seite angezeigt werden. Das geht aber nicht - ich weiss ja nicht welche id die 6. News hat... :rolleyes:

mfg poolpage
 
@dunsti teoretisch haste recht, bräuchte ich nicht, aber wollen will ichs trotzdem :)

ne, aber ich hab mir jetzt folgendes 2 stufiges verfahrn überlegt..

erst ein INSERT wo die neue id erstellt wird. dieses id_copy feld einfach mit 0 z.b. belegen und danach ein update durchführen, wo die vorherige id gesetzt wird.

müsste funktionieren,...naja,..für alle dies interessiert ;)

ciao
 
@infoschlampe: jo, das wär das einzige, wie es geht.

@poolpage: Dafür gibts den Befehl LIMIT: "SELECT * FROM tabelle LIMIT 0,5"

Gruß
Dunsti
 
Zurück