"We are back" « oc.at

[MySQL] ID des bearbeiteten Datensatzes rausfinden

tomstig 05.10.2005 - 23:11 2896 27
Posts

tomstig

OC Addicted
Avatar
Registered: Nov 2003
Location: /home/tomstig/
Posts: 1341
Gibt es eine Möglichkeit, nach einem UPDATE die ID des Datensatzes rauszufinden, der bearbeitet wurde? Wenn ich z.B. eine Tabelle habe, mit dem id-Feld "user_id" und ich einfach mache:
Code: PHP
UPDATE users SET user_rights = 1
dann hab ich ja keine Ahnung, welche user_id gerade bearbeitet wurde.
Bei INSERT hab ich das bisher immer so gelöst:
Code: PHP
SELECT * FROM blabla ORDER BY id DESC LIMIT 1
Aber es kann ja sein, dass nach dem gerade bearbeiteten Datensatz eine anderer Datensatz steht.

Ich hab schon die Überlegung gehabt, dass ich der Tabelle ein timestamp-Feld hinzufüge, beim UPDATEN die timestamp aktualisiere und das ganze dann über diese abrufe... aber irgendwie wär das ein wenig umständlich... sonstige lösungsvorschläge?
Bearbeitet von tomstig am 12.10.2005, 19:35

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11343
Zitat von tomstig
Wenn ich z.B. eine Tabelle habe, mit dem id-Feld "user_id" und ich einfach mache:
Code: PHP
UPDATE users SET user_rights = 1
dann hab ich ja keine Ahnung, welche user_id gerade bearbeitet wurde.

doch ... alle.

Crash Override

BOfH
Registered: Jun 2005
Location: Germany
Posts: 2951
Wie machst du denn das Update auf die Tabelle ohne den Schlüssel zu kennen?

dio

Here to stay
Registered: Nov 2002
Location: Graz
Posts: 4965
Was genau hast du vor?

Vl. hilft dir das: http://de.php.net/manual/de/function.mysql-info.php

tomstig

OC Addicted
Avatar
Registered: Nov 2003
Location: /home/tomstig/
Posts: 1341
Zitat von that
doch ... alle.

jo, sry, hab das WHERE vergessen...

Bin grad draufkommen, dass es auch nicht so gehen würde, wie ichs mir gedacht habe und schreib grad das ganze um...

Wenn man keine Arbeit hat, dann macht man sich halt eine...

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4317
und wenn du ein where hast, kannst du ja einfach ein select mit dem selben where machen und hast die id.

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
nicht ganz...

wenn du nämlich genau die spalte änderst die du im where abfragst, dann hast irgendwie ein Problem ;)

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4317
nicht wenn ich das select vorher mache ;) hab ja nicht geschrieben, wann er es macht *g*
wobei dann ist eben die frage, will er die neue oder die alte id.

jives

And the science gets done
Avatar
Registered: Sep 2001
Location: Baden
Posts: 3548
Bei einem UPDATE ändert sich die id (afaik(!)) sowieso nicht, d.h. es gibt keine "alte" oder "neue" id.

Römi

Hausmeister
Avatar
Registered: Feb 2001
Location: Bez. Tulln
Posts: 5329

rettich

Legend
waffle, waffle!
Avatar
Registered: Jan 2004
Location: wien
Posts: 794
Zitat von Römi
da gibts einen befehl afaik,
http://de.php.net/manual/de/functio...l-insert-id.php

hm? die funktion liefert aber nur einen wert zurück, wenn du eine zeile insertest. beim update kommt nix.

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4317
Zitat von jives
Bei einem UPDATE ändert sich die id (afaik(!)) sowieso nicht, d.h. es gibt keine "alte" oder "neue" id.

normalerweise nicht. ich kann aber auch die id ändern, wenn ichs will.

Römi

Hausmeister
Avatar
Registered: Feb 2001
Location: Bez. Tulln
Posts: 5329
Zitat von kleinerChemiker
normalerweise nicht. ich kann aber auch die id ändern, wenn ichs will.

Aber dann weißt du ja eh welche id die neue ist

tomstig

OC Addicted
Avatar
Registered: Nov 2003
Location: /home/tomstig/
Posts: 1341
Wofür ich das gebraucht hätte, war folgendes:
Da ich bei einer Änderung relativ viele Daten updaten muss, hab ich einfach die alten gelöscht und einfach die geänderten Daten eingefügt (sprich, die Einträge haben eine neue ID bekommen). In einem anderen Table hab ich aber genau diese IDs gespeichert. Wenn ich nun die Daten geändert habe, dann ist die Verbindung von dem einen Table zu dem anderen verloren gegangen (logisch: wenn ich die alten Einträge lösche und stattdessen ganz neue einfüge). Jetzt hatte ich die Idee, dass von dem table, von dem aus auf den anderen verlinkt wird, einfach die IDs aktualisiere. Und dafür hätte ich einen Befehl gebraucht, der mir die ID gibt, von dem Eintrag der mit UPDATE bearbeitet wird.

Weil wenn ich z.B. folgendes mache
Code: PHP
UPDATE table SET user_rights = 1 WHERE user_rights = 0
dann weiß ich ja nicht, welche ID gerade bearbeitet wird...

Aber ich habs so gelöst, dass bei einer Änderung einfach die Einträge gezielt geändert werden und nicht einfach gelöscht und neu eingetragen werden...

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4317
oder du machst einfach ein SELECT id FROM table WHERE user_rights = 0 vorher, dann hast du auch die id's.

@römi: ist im grunde ja eh nur ne theoretische betrachtung. und um dem die krone aufzusetzen, ich weiß es nicht, wenn ich LAST_INSERT_ID()+1 oder gar RAND() verwende *ggg* aber das geht dann schon bischen gar weit ;)
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz