PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   nach limit 6 den rest löschen (https://www.php-resource.de/forum/php-developer-forum/100255-nach-limit-6-den-rest-loeschen.html)

skiN 13-09-2010 04:00

nach limit 6 den rest löschen
 
hallo, da ich absoluter anfänger in php bin habe ich eine frage an euch:
wie mache ich nachdem z.B in einer shoutbox 8 sprüche sind und ich limit 6 habe der die letzten 2 die nicht emhr angezeigt sind automatisch löscht? danke für antworten!

wahsaga 13-09-2010 04:03

Anfänger im stellen verständlicher Fragen bist du offenbar auch.

Bitte drücke dich klarer aus - wo willst du sie löschen? Nur aus der Anzeige, oder aus deiner Datenspeicherung? Wenn letzteres, wie sieht die aus?

skiN 13-09-2010 04:04

Aus der Datenbank natürlich, sorry.
Die Datenbank beinhaltet ein Table cm_content_spruch dort soll er den wie gesagt die letzten sprüche nach dem limit löschen also die id.

wahsaga 13-09-2010 04:11

Warum willst du die überhaupt löschen?
Datenbanken kommen gut mich einer großen Anzahl von Datensätzen klar - und aus Revisionsgründen auch die früheren Einträge noch verfügbar zu haben, kann manchmal auch nicht schlecht sein.

Aber, wenn du unbedingt willst - auch DELETE kennt die ORDER BY- und die LIMIT-Klausel.

“LIMIT x, unendlich” gibt es nicht - aber man kann für unendlich auch einfach einen sehr großen Wert einsetzen.

Und btw., eine ID sollte immer ausschließlich zur eindeutigen Identifikation eines Datensatzes dienen, nie zu etwas anderem - also auch nicht zu einer Sortierung.
Wenn du also die „neuesten“ Datensätze behalten und „ältere“ löschen willst, solltest du auch noch den Timestamp des Eintragens mit abspeichern, und danach sortieren.

skiN 13-09-2010 04:13

Wie gesagt - ich bin ein PHP Anfänger könntest du mir evt. den Code dafür zeigen wie ich die älteren immer lösche?

wahsaga 13-09-2010 04:26

Bitte lies im Manual nach, wie es genau geht.
Wenn dir die Grundlagen noch nicht klar sind, arbeite ein Tutorial durch.

Solltest du konkrete Verständnisprobleme haben, frag hier wieder nach.

fireweasel 14-09-2010 13:17

Zitat:

Zitat von wahsaga (Beitrag 645233)
...
Aber, wenn du unbedingt willst - auch DELETE kennt die ORDER BY- und die LIMIT-Klausel.

“LIMIT x, unendlich” gibt es nicht - aber man kann für unendlich auch einfach einen sehr großen Wert einsetzen.

"DELETE ... WHERE timestamp <= x" könnte auch funktionieren.

wahsaga 14-09-2010 14:17

Zitat:

Zitat von fireweasel (Beitrag 645274)
"DELETE ... WHERE timestamp >= x" könnte auch funktionieren.

Dann hast du aber im Zweifelsfalle gar keine Einträge mehr übrig, wenn längere Zeit keine neuen Einträge gemacht wurden.

fireweasel 17-09-2010 13:34

Zitat:

Zitat von wahsaga (Beitrag 645281)
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 645233)
(...) “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.

thomaswerner 03-01-2017 17:48

Man kann aber in MySQL ROWNUM simulieren, sogar in einer einzigen Query ohne Stored Procedures:

https://www.ideaweb.de/blog/mysql-da...tzen-behalten/


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:22 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG