Einzelnen Beitrag anzeigen
  #9 (permalink)  
Alt 17-09-2010, 13:34
Benutzerbild von fireweasel fireweasel
 Registrierter Benutzer
Links : Onlinestatus : fireweasel ist offline
Registriert seit: Sep 2008
Ort: At home
Beiträge: 851
fireweasel wird schon bald berühmt werdenfireweasel wird schon bald berühmt werden
fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken
Standard

Zitat:
Zitat von wahsaga Beitrag anzeigen
Dann hast du aber im Zweifelsfalle gar keine Einträge mehr übrig, wenn längere Zeit keine neuen Einträge gemacht wurden.
Selbstverständlich war mit "timestamp" nicht der aktuelle Datumsstempel gemeint, sondern ein Wert, den man in einem vorherigen SELECT (Sub-Select oder was auch immer) als den ältesten der aktuellsten 6 Einträge ermittelt hat. Es hätte auch ein simpler Zähler getan, aber da eine Shout-Box üblicherweise Datumsstempel hat, kann man die gleich mitbenutzen.

Mich hat das hier gestört:
Zitat:
Zitat von wahsaga Beitrag anzeigen
(...) “LIMIT x, unendlich” gibt es nicht - aber man kann für unendlich auch einfach einen sehr großen Wert einsetzen. (...)
Das lag daran, weil mir nicht bekannt war, dass diese Vorgehensweise im MySQL-Handbuch explizit empfohlen wird:
Zitat:
... To retrieve all rows from a certain offset up to the end of the result set, you can use some large number for the second parameter. ...
SQLite beispielsweise erlaubt hier die Angabe einer (beliebigen) negativen Zahl. Resultsets haben keine negativen Offsets, also sollte da nichts schiefgehen.
Zitat:
The LIMIT clause places an upper bound on the number of rows returned in the result. A negative LIMIT indicates no upper bound.
Das erscheint mir etwas "sauberer", auch wenn bei einer Shoutbox, deren "überschüssige" Einträge regelmäßig gelöscht werden, das Problem wohl nicht auftreten wird, dass die "zufällig gewählte große Zahl" nicht die obere Grenze darstellen könnte.

Am besten gefallen hätte mir die Oracle-Syntax, angewandt auf die Aufgabenstellung hier:
Code:
DELETE FROM 'table' WHERE ROWNUM >= 6

Aber "LIMIT" gehört sowieso nicht zum SQL-Standard, und der OP arbeitet sicher mit MySQL, daher verbuche ich das Ganze für mich unter "Wieder mal was gelernt".

Ich frage mich aber, wie die diversen Database-Abstraction-Layer dieses Problem angehen. AdoDB hat (wenn ich mich richtig erinnere) eine eingebaute Limit-Funktion (die passenden SQL-Quellcode erzeugt), aber bei PDO habe ich diesbezüglich nichts gefunden.

Geändert von fireweasel (17-09-2010 um 13:48 Uhr)
Mit Zitat antworten