Dieletzten 10 Einträge aus DB löschen

  • PHP

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Chrisber.

    Dieletzten 10 Einträge aus DB löschen

    Hallo Leute,
    Ich bin gerade dabei für einige meiner "Kleinen" programme ein PHP Script zu basteln das die letzten 10 Beiträge löscht so das die Datenbank nie überfüllt ist.

    Bisher bin ich soweit gekommen das ich die letzte ID auslese und in einer Variabel zwischenspeicher.

    Nun nach ein wenig Überlegen hab ich mir gedacht das ich ALLE Einträge lösche die Kleiner als die letzte ID ist.

    Wie kann ich das Bewerkstellgen ?
    Was ist besser, alle einträge die < sind als die letzte ID oder nur die letzten 10 Einträge löschen ??

    MFG
    Patrick

    Also were es quasi so:

    PHP-Quellcode

    1. <?php
    2. $abfrage = "SELECT * FROM Tabelle ORDER BY ID DESC LIMIT 10";
    3. $ergebnis = mysql_query($abfrage);
    4. while($row = mysql_fetch_object($ergebnis))
    5. {
    6. $id = $row -> id;
    7. $loeschen = "DELETE FROM Tabelle WHERE id = '$id'";
    8. $loesch = mysql_query($loeschen);
    9. echo "Datensatz mit ID $id wurde gelöscht.<br/>";
    10. }
    11. ?>


    Wenn ich es richtig verstanden habe.

    Ja ich nutze MySQL bist richtig ausgegangen

    PHP-Quellcode

    1. $ergebnis = mysql_query("SELECT `ID` FROM `Tabelle` ORDER BY `ID` DESC LIMIT 10");
    2. while($row = mysql_fetch_object($ergebnis))
    3. {
    4. echo "Datensatz mit ID ".$row->ID." wurde gelöscht.<br/>";
    5. }
    6. mysql_query("DELETE FROM `Tabelle` ORDER BY `ID` DESC LIMIT 10");
    To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

    At some point in time, you recognize that knowing more does not necessarily make you more happy.
    Sind das nicht beides die gleichen nur das der obere einen echo ausgibt und der untere nicht ??

    Das untere gibt auch ein Echo aus.
    Der Unterschied ist, dass du keine Backtickles benutzt (die ` um Namen deiner Tabelle bzw. Felder). Des Weiteren verwendet mein Beispiel nur zwei SQL-Queries. Du hingegen möchtest jede Zeile einzeln löschen (also 11 Queries), wobei du damit das ganze Optimierungspotential zerstörst. Bei einer kleinen Anwendung wohl egal; aber ich würde da immer an die Zukunft denken ;-)
    To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

    At some point in time, you recognize that knowing more does not necessarily make you more happy.
    Also in zukunft den query als 1 zeiler nicht als 2 zeiler wie ich es gewohnt bin/war ??

    Nur müsste der Delete Bereich nich auch in die Do-While schleife ? oder hat das einen grund das du die seperat geschrieben hast (ausserhalb der schleife)

    Darum geht es nicht. Du verstehst das falsch...

    Schau. Du rufst erst die Daten aus der Datenbank ab mit dem SELECT-Befehl.
    In der while-Schleife durchläufst du jede Reihe (also insgesamt 10 Stück). Während einem Durchlauf (= Iteration) setzt du wieder einen Query ab, der eine einzige Zeile löscht, der zur ID passt.

    Stell dir vor, dein Vater sagt dir, dass du den Papiermüll rausbringen sollst. Wenn du fertig bist, sagt er dir, du sollst den gelben Sack rausstellen. Du kommst wieder zu ihm, und dann sagt er, dass du auch noch den Restmüll wegbringen mögest. Was fällt dir auf? Du hättest dir drei Gänge sparen können, wenn er dir alles auf einmal gesagt hätte. Ergo: er hat dein Optimierungspotential vernichtet.

    Selbiges machst du oben. Wenn du den DELETE-Befehl jedoch nicht in der Schleife hast, sondern außerhalb (also darunter), und MySQL direkt sagst, dass er die 10 Zeilen löschen soll, geht es ja logischerweise viel schneller. Funktionieren tut das, da du genau den gleichen Zusatz angibst wie beim SELECT. Das "ORDER BY" und "LIMIT" sorgt dafür, dass das DELETE genau die gleichen Daten erwischt wie das SELECT.
    To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

    At some point in time, you recognize that knowing more does not necessarily make you more happy.