[PHP/MySql] letzen 10 Einträge löschen

CrazySash

Well-known member
ID: 93631
L
20 April 2006
2.273
103
Nabend.

Ich stehe gerade mal wieder komplett auf dem Schlauch...

Ich habe eine Tabelle mit einträgen, die ich aus verschiedenen rss feeds auslese.

Pro feed sind 10 Links gespeichert.

So, wenn ich nun ein update machen will, dann sollen neue Links hinzugefügt werden, die anzahl die hinzugefügt wurde, soll aber dann auch wieder gelöscht werden.

Also 10 Einträge in der DB

2 neue kommen hinzu, nun sollen die beiden letzen Einträge, gelöscht werden.

wie muss da der Deletebefehl aussehen?
 
Code:
DELETE FROM tabelle ORDER BY eintragungsdatum ASC LIMIT 2
würde ich mal so spontan sagen
 
Code:
$query = "DELETE FROM `feed` ORDER BY `datum` LIMIT ".$anz_neue_eintraege;

Edit: mh... da war jemand schneller
 
Wobei man aber dazu sagen sollte, dass ORDER BY nicht offiziell zum SQL Standard gehört, muss man also ausprobieren ob das wirklich so klappt.
 
Wenn die IDs schön geordnet sind, müsste der gehen:
DELETE FROM `table` WHERE `id` > MAX(`id`)-2 LIMIT 2

Ansonsten muss eben ne Subquery bzw. zweite Abfrage her.
 
Also ich habs grad mit MySQL 4.0 probiert und es scheint zu funktionieren.
Alternativ Subquery (erst ab 4.1)
Code:
DELETE FROM tabelle WHERE id IN (SELECT id FROM tabelle ORDER BY datum LIMIT 2)
(ungetestet, hab grad keine entsprechende Datenbank in Reichweite
 
theHacker schrieb:
Wenn die IDs schön geordnet sind, müsste der gehen:
DELETE FROM `table` WHERE `id` > MAX(`id`)-2 LIMIT 2

Ansonsten muss eben ne Subquery bzw. zweite Abfrage her.

ich teste ma

EDIT:

geht nicht. könnte daran liegen, dass im Where clause noch pid = XXX ist. also damit grenze ich die einträge eines bestimmten blogs ein.

DELETE FROM Tabelle WHERE pid = "XXX" AND id > MAX(id)-1 LIMIT 1

Invalid use of group function
 
Zuletzt bearbeitet:
CrazySash schrieb:
ne scheint net zu gehen...
Was kommt bei der ORDER BY Methode für einen Fehler? bzw. an was erkennst du, dass es nicht funktioniert?
Laut mysql-Handbuch sollte es funktionieren(?)
For the single-table syntax, the DELETE statement deletes rows from tbl_name and returns the number of rows deleted. The WHERE clause, if given, specifies the conditions that identify which rows to delete. With no WHERE clause, all rows are deleted. If the ORDER BY clause is specified, the rows are deleted in the order that is specified. The LIMIT clause places a limit on the number of rows that can be deleted.
 
ne geht abernicht,

You have an error in your SQL syntax near 'ORDER by date ASC LIMIT 1 ' at line 1

EDIT: habs auch direkt im PHPMyAdmin geteste.

Hackers vorschlag geht auch nicht Invalid use of group function

SEHE gerade, dass ich Version 3.233.23.49 habe. kann es daran liegen?
 
Zuletzt bearbeitet:
theHacker schrieb:
Wenn die IDs schön geordnet sind, müsste der gehen:
DELETE FROM `table` WHERE `id` > MAX(`id`)-2 LIMIT 2

Ansonsten muss eben ne Subquery bzw. zweite Abfrage her.

denk mal scharf nach was du da machst ;) MAX ist ne aggregat funktion die auf das ergebnis angewendet wird. Aber wie soll man zu einem ergebnis kommen wenn das ergebnis durch das egebnis bedingt ist :ugly:


zum thema... mit mysql 3 brauchste dazu 2 queries. einfach die einträge auslesen die gelöscht werden und dann löschen.

bsp:

PHP:
$result = mysql_query("SELECT id FROM tabelle ORDER BY datum LIMIT 2");
$ids = array();
while(list($id) = mysql_fetch_num($result)) {
   $ids[] = $id;
}

$ids = implode(',',$ids);
mysql_query("DELETE FROM tabelle WHERE id IN ($ids)");

das wäre jetzt nen improvisierter subquery... aber ab mysql 4.1 würde ich zu richtigen subquerys greifen die sind schneller.
 
CrazySash schrieb:
ne geht abernicht,

You have an error in your SQL syntax near 'ORDER by date ASC LIMIT 1 ' at line 1

Hmm. Kann es sein, dass der Fehler dann vo dem "ORDER" ist? Ist alles richtig geschrieben? Zeichen richtig gesetzt?

Welche Spalten hast du in der MySQL-Tabelle?
 
ja, es liegt daran, dass ORDER im DELETE nicht geht irgendwie...

ich tele am mo ma mit meinem hoster ansonsten muss eben diese while - Schleife her