dedlfix: ID´s aus SQL Filtern und löschen.

Beitrag lesen

echo $begrüßung;

Du hantierst ja immer noch mit den ID rum. Diese erscheinen nur rein optisch als ein geeignetes Sortierkriterium. Du willst die x neuesten Datensätze, also sortiere nach einem Zeit-Kriterium. Wenn du dafür noch keine Spalte in der Tabelle hast, leg eine TIMESTAMP-Spalte an. TIMESTAMP hat einen eingebauten Mechanismus, der beim Erstellen und wenn gewünscht auch beim Update die aktuelle Zeit hinterlässt.

Da du nicht gleichzeitig selektieren und Daten ändern kannst, brauchst du eine Möglichkeit, die x Datensätze zuerst zu ermitteln und sie zwischenzuspeichern. Dazu bietet sich eine temporäre Tabelle an (wenn du die Berechtigung hast, eine solche anzulegen)

CREATE TEMPORARY TABLE temp
    SELECT id FROM tabelle ORDER BY zeitspalte DESC LIMIT 30

Das legt eine Tabelle mit den ID der 30 neuesten Datensätze an. Temporäre Tabellen bleiben für die Dauer einer Sitzung erhalten und werden danach wieder entfernt. Nun kannst du die Daten löschen und dabei die in temp enthaltenen dabei ausschließen:

DELETE FROM tabelle
    USING tabelle LEFT JOIN temp ON tabelle.id = temp.id
    WHERE temp.id IS NULL

oder

DELETE FROM tabelle WHERE id NOT IN (SELECT id FROM temp)

echo "$verabschiedung $name";