Alle Datensätze bis auf die letzten z.B. 50 aus der Datenbank löschen

aliben37

Grünschnabel
Hi @all,

habe leider zum Thema nix gefunden, ausser den Eintrag mit den 10 letzten Datensätzen. Da wird aber eine WHERE Abfrage im SELECT gestellt. Abändern hat leider nicht get. :(
Ich will einfach nur abfragen wie viele Datensätze (Rows) vorhanden sind und wenn es z.B. 55 sind, die ersten 5 löschen. Also dass immer die 50 aktuellsten Einträge bestehen bleiben. Sicher ist es ganz simpel, aber ich hab ne Denkblockade. ;-)

Falls es doch irgendwo erwähnt wurde, dann SORRY!

THX Ali :)
PS: suuuper Seiten hier, hab mich grad eben erst angemeldet!
 
Hallo,

welches DBMS benutzt Du?

Es gibt nicht für jeden Fall ein einziges SELECT.

Was z.B. möglich wäre und mit MySQL recht einfach ist und in Zusammenarbeit mit PHP oder in einer Stored Procedure laufen kann:

SQL:
1. SELECT COUNT(*)-50 as anzahl_zu_loeschen FROM <tabelle> 

-- Wert merken (in PHP-Variable oder mittels INTO innerhalb einer Stored Procedure 
-- schauen ob groesser 0, und wenn ja dann 2.ausfuehren:

2. DELETE FROM <tabelle> ORDER BY <datespalte> LIMIT <anzahl_zu_loeschen>

Nachteil dieser Lösung ist, dass sie nicht transaktionssicher ist.

Es gibt sicher andere Möglichkeiten mit Ranking, Rownums, Subquerys. Aber nicht alle davon funktionieren in jedem Datenbanksystem. Daher wäre es hilfreich, zu wissen, welches du einsetzt :-)

Markus
 
Hi Markus,

erst mal vieeelen Dank für deine schnelle Antwort!
Hab ich ganz vergessen .... MySQL & PHP 5, Standard Webhosting ;-)

Ich probiers gleich aus und poste das Resultat.
Also echt super hier, gerade für Einsteiger! Wenn man in anderen Foren liesst wird immer dumm gepöpelt und auf das Lernen von Manual's verwiesen, die dann meist in englisch sind.

Gruss
Ali :-)
 
Hi Markus,

das zählen geht:
PHP:
$abfrage = "SELECT COUNT(*)-50 AS anzahl_zu_loeschen FROM chat_daten";
$ergebnis = mysql_query($abfrage)  or die (mysql_error());
$anzahl=mysql_fetch_array($ergebnis);
echo 'Anzahl:'.$anzahl['anzahl_zu_loeschen'].'<br>';

aber das Löschen klappt nicht:
PHP:
$loeschen = "DELETE FROM chat_daten ORDER BY id LIMIT $anzahl"; 
$geloescht = mysql_query($sql);

was mache ich da falsch?
 
Hallo nochmal,

mhm wenn du $anzahl direkt benutzt, wird es nicht gehen, da dies ein Array ist laut deinem Source.

Du möchtest also die neuesten 50 ID absteigend beibehalten? Dann wäre das Statement ansonsten korrekt. Ich denke es liegt wirklich an $anzahl.

evtl. mal probieren:

PHP:
$loeschen = "DELETE FROM chat_daten ORDER BY id LIMIT " .  $anzahl['anzahl_zu_loeschen']; 
$geloescht = mysql_query($loeschen);

sag einfach mal die Fehlermeldung, die erscheint.

Markus
 
Hi Markus,

du bist einfach klasse, es funktioniert so!
Klar, iss ja ne Array. Immer diese Denkfehler. :rolleyes:

Habe mir auf unserer Seite für den "Hausgebrauch" einen Chat auf SQL Basis gebastelt. Um den Traffic niedrigst zu halten, hat die DB jetzt immer nun ~ 50 Einträge.

Vieeeelen Dank noch mal für deine bedingungslose und vor allem schnelle Hilfe! ;-)

Gruss
Ali

Frage: kann ich tutorials.de auf unserer Seite verlinken: saarbox.de ?
 
Zuletzt bearbeitet:
Zurück