MySQL-Unterabfragelimit: Löschen von Beiträgen mit Ausnahme der neuesten 15
Im Bereich der Datenbankoptimierung ist es oft notwendig, redundante oder veraltete Daten zu entfernen. In dieser Frage wird untersucht, wie mithilfe einer MySQL-Unterabfrage alle Beiträge außer den letzten 15 gelöscht werden.
Die ursprüngliche Abfrage:
DELETE FROM posts WHERE id NOT IN (SELECT id FROM posts ORDER BY timestamp DESC LIMIT 0, 15)
Bei dieser Abfrage tritt jedoch ein Fehler auf, da MySQL keine Unterstützung dafür bietet „LIMIT & IN/ALL/ANY/SOME“-Unterabfragen in früheren Versionen. Um dieses Problem zu beheben, kann eine modifizierte Abfrage verwendet werden:
DELETE FROM posts WHERE id NOT IN ( SELECT * FROM ( SELECT id FROM posts ORDER BY timestamp DESC LIMIT 0, 15 ) AS t);
In dieser modifizierten Abfrage wird eine zusätzliche Unterabfrage als abgeleitete Tabelle mit dem Alias „t“ eingeführt. Diese abgeleitete Tabelle enthält die IDs der letzten 15 Beiträge, sortiert in absteigender Reihenfolge basierend auf ihrem Zeitstempel. Die Hauptabfrage verwendet dann diese abgeleitete Tabelle, um diese spezifischen IDs beim Löschen von Beiträgen auszuschließen.
Mit dieser Problemumgehung ist es möglich, das gewünschte Ergebnis zu erzielen, nämlich das Löschen aller Beiträge mit Ausnahme der neuesten 15 in MySQL-Versionen, die dies nicht tun. Die Unterabfragen „LIMIT & IN/ALL/ANY/SOME“ werden nicht unterstützt. Dieser überarbeitete Ansatz entfernt effektiv veraltete Beiträge und behält gleichzeitig die neuesten zur späteren Bezugnahme bei.
Das obige ist der detaillierte Inhalt vonWie lösche ich alle Beiträge außer den neuesten 15 in MySQL ohne Unterabfrageunterstützung „LIMIT & IN'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!