letzten Datensatz löschen
-
Könnte man das nicht auch direkt in einen Befehl schreiben (müsstest du ausprobieren ):
DELETE FROM schnutzelfutz WHERE id = MAX(id)
-
geht es zufällig darum, den frisch gemachten eintrag in die bücherliste zu stornieren, wenn wegen irgenwdas der im script folgende eintrag zum beispiel in die autorenliste nicht klappte?
dann wäre http://www.zend.com/manual/function.mysql-insert-id.php sehr fein.
-
flenders schrieb:
Könnte man das nicht auch direkt in einen Befehl schreiben (müsstest du ausprobieren ):
DELETE FROM schnutzelfutz WHERE id = MAX(id)
hmmm...
solche Funktionen wie COUNT, NAX, MIN, ... müssen in SQL immer nach der SELECT-Anweisung stehen weil damit Datensätze "gruppiert" werden können. Ich könnte mir noch als alternative Lösung einen Sub-Select vorstellen:
SELECT * FROM schnutzelfutz WHERE id in (SELECT MAX(id) FROM schnutzelfutz) -- ungetestet --
MySQL macht das aber IMHO erst ab Version 4.
-
DELETE from WHERE MAX() ist bei einem DELETE nicht gültig.
erg = mysql_query(anz = mysql_num_rows($erg);
mag zwar die Anzahl der Datensätze liefern aber warum sollte man die DB damit belasten.
ein
SELECT count(*) from buecherliste;
geht schneller und es wird die DB nicht belastet da die Anzahl in einer Variable von MYSQL gespeichert ist. SOmit muss die DB nicht durchgegangen werden sondern nur der Inhalt der Variable.
Abgesehen davon da ein
SELECT *
sowieso nie verwenndet werden soll.
-
Ich habe mir eure Beiträge angeschaut und löse es jetzt so:
$erg = mysql_query("SELECT MAX(id) FROM buecherliste"); $num = mysql_fetch_row($erg); $erg = mysql_query("DELETE FROM buecherliste WHERE id=$num[0]");
notabene: id steht als erstes Attribut in der Liste, daher num[0].
PS
ah ja, ist das eine Art goldene Regel, dass SELECT * nie verwendet werden soll? Hab ich noch gar nicht drüber nachgedacht. Thx.
-
Ein Select * soll nur dann nicht verwendet werden, wenn du nicht alle Datensätze brauchst. Wenn doch, dann isses natürlich ok.
-
Es kann dann aber ggf. Probleme machen, falls du noch Spalten hinzufügst o.ä.
Mit list(erg); hast du in $num direkt die Anzahl
Ob jetzt MAX(id) oder COUNT(*) schneller ist müsste man ausprobieren, weiß ich grad nicht
-
MAX() COUNT() können unterschiedliche Werte liefern.
Ist somit nicht das selbeCOUNT() ist denke ich auch schneller da sich MYSQL den letzten Wert der ID nicht merkt. Das merkt man daran, daß ein aufruf auf last_insert_id nur mit dem vorhandenen Handle funktioniert. Sobald man den Connect schließt ist der Wert weg.
MYSQL kennt nur die Anzahl der Datensätze welche man mit count() bekommt.
-
Logisch
Dann wird er wohl MAX() brauchen, denn da er ja vorhat Datensätze zu löschen liefert COUNT() für ihn nach dem ersten Löschen ein für ihn nicht brauchbares Ergebnis
-
Genau
Allerdings fehlt noch die Antwort auf Volkard`s Frage.
-
Bin grad etwas durcheinander
Ja, das wäre wohl das allerbeste! Aber das war doch eher eine Aussage, als eine Frage - finde ich - wenn, dann aber an C++arsten
-
geht es zufällig darum, den frisch gemachten eintrag in die bücherliste zu stornieren
Wenn dies zutrifft hat ja Volkard die Antwort schon gegeben
-
flenders schrieb:
wenn, dann aber an C++arsten
ja, an C++arsten. ich warte immernoch auf die antwort.
-
Es ging mir nicht um den Wert (id) der letzten Einfügeoperation, sondern generell um den letzten Datensatz, z. B. nach mysql_close und erneutem Öffnen der DB. Daher ist mysql_insert_id zwar gut, aber nicht genau passend für mein Problem gewesen. Danke!