gnude
Anmeldungsdatum: 11. Juli 2014
Beiträge: 806
|
Hallo ich möchte in mysql eine Abfrage um einen Wert in den zuletzt geschriebenen
Datensatz zu ändern. Da ich eine automatisch hochzählende "id" habe, müsste ich ja nur den höchsten
Wert her nehmen. UPDATE tabellenname SET test='$test' WHERE max('id') Das ist so aber nicht erlaubt. Hatjemand eine andere Idee?
|
misterunknown
Ehemalige
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 4403
Wohnort: Sachsen
|
Womit machst du das? Bei PHP kannst du beispielsweise mysql-insert-id verwenden, um die ID des zuletzt hinzugefügten Datensatz zu ermitteln. Die MySQL-Konnektoren anderer Programmiersprachen haben sicherlich ähnliche Funktionen.
|
gnude
(Themenstarter)
Anmeldungsdatum: 11. Juli 2014
Beiträge: 806
|
Ich möchte das per PHP machen. Allerdings ist das erstellen des Eintrages länger her und läuft nicht in der gleichen Umgebung.
Deshalb würde ich eine mysql Lösung bevorzugen.......
|
misterunknown
Ehemalige
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 4403
Wohnort: Sachsen
|
gnude schrieb: Ich möchte das per PHP machen. Allerdings ist das erstellen des Eintrages länger her und läuft nicht in der gleichen Umgebung.
Deshalb würde ich eine mysql Lösung bevorzugen.......
Wie willst du denn dann sicher stellen, dass es wirklich der richtige Eintrag ist? Wenn in der Zwischenzeit 3 weitere Einträge hinzugekommen sind, hättest du ein Problem. Um welchen Anwendungsfall geht es denn? Eventuell gibt es eine bessere Lösung für dein eigentliches Problem.
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17548
Wohnort: Berlin
|
Die Besonderheiten von MYSQL kenne ich nicht, aber in klassischem SQL sähe das doch so aus: | UPDATE tabellenname
SET test='$test'
WHERE id=(SELECT max('id') FROM tabellenname);
|
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
Hallo! Du könntest auch @last_id versuchen. Ich weiß nur gerade nicht mehr, ob das MySQL war ☺
|
tomy1909
Anmeldungsdatum: 20. Oktober 2016
Beiträge: 3
|
Wie wäre es damit:
| SELECT * FROM `table`order by id DESC limit 1
|
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12801
|
user_unknown schrieb:
| UPDATE tabellenname
SET test='$test'
WHERE id=(SELECT max('id') FROM tabellenname);
|
Die einfachen Anführungsstriche um "id" sollten aber raus. Ansonsten ermittelst Du das Maximum der Zeichenkette "id", falls das überhaupt gültig ist. (Ich kann es gerade nicht ausprobieren.)
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17548
Wohnort: Berlin
|
rklm schrieb: user_unknown schrieb:
| UPDATE tabellenname
SET test='$test'
WHERE id=(SELECT max('id') FROM tabellenname);
|
Die einfachen Anführungsstriche um "id" sollten aber raus. Ansonsten ermittelst Du das Maximum der Zeichenkette "id", falls das überhaupt gültig ist. (Ich kann es gerade nicht ausprobieren.)
Ja, mag sein, mit dem MYSQL-Dialekt kenne ich mich nicht aus. Dann ist aber wohl auch in der Frage schon falsch?
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12801
|
user_unknown schrieb: rklm schrieb:
Die einfachen Anführungsstriche um "id" sollten aber raus. Ansonsten ermittelst Du das Maximum der Zeichenkette "id", falls das überhaupt gültig ist. (Ich kann es gerade nicht ausprobieren.)
Ja, mag sein, mit dem MYSQL-Dialekt kenne ich mich nicht aus.
Nee, dass einfache Anführungsstriche Zeichenkettenwerte sind, ist allgemein. Lediglich diese Backticks um Spalten- und Tabellennamen herum sind eine MySQL-Spezialität, soweit ich weiß. Wenn man DB-Objekte in exakter Grroßkleinschreibung benennen will, nimmt man normalerweise doppelte Anführungsstriche.
Dann ist aber wohl auch in der Frage schon falsch?
Jau. Hatte ich glatt übersehen, weil das Kommando generell ungültig ist. ☺ Ich habe die Tage mit einer MySQL getestet, aber noch keine elegante Lösung gefunden. Die von Dir vorgeschlagene Variante mit der Subquery in Klammern mochte er bei mir nicht. 😢
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
Hallo nochmal. lastid war wohl sqlite. In MySQL heisst das mysql> SELECT LAST_INSERT_ID(); und gibt einen Integer zurück. Also kann man bspw. sowas machen: | update tablename set fieldname="value" where id=last_insert_id();
|
Wichtig ist, dass last_insert_id 0 zurückgibt, wenn es kein zuletzt geändert gibt. Das sollte man bei den Abfragen berücksichtigen.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12801
|
ChickenLipsRfun2eat schrieb:
Wichtig ist, dass last_insert_id 0 zurückgibt, wenn es kein zuletzt geändert gibt. Das sollte man bei den Abfragen berücksichtigen.
Man sollte noch viel mehr berücksichtigen, z.B. dass diese Funktion nur den korrekten Wert liefert, wenn der Max-Wert tatsächlich als letztes eingefügt wurde (und nicht z.B. ein anderer Wert oder einer in einer anderen Tabelle). Doku
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
gnude schrieb: ich möchte in mysql eine Abfrage um einen Wert in den zuletzt geschriebenen
Datensatz zu ändern.
Daher wäre doch last_insert_id besser als der Max-Wert oder hab ich wieder nen Knoten in den Synapsen?
|