Tabelle bis auf die letzten 10 Einträge leeren

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Tabelle bis auf die letzten 10 Einträge leeren

    Hallo,

    ich möchte meine Tabelle (id, timestamp, text) per Cronjob regelmäßig leeren lassen - bis auf die letzten (neuesten) 10 Einträge.

    Bisher habe ich es so gelöst, dass ich zunächst per select die größte ID auslesen und dann per PHP 10 subtrahiere und mit neuem Query per DELETE alles lösche was kleiner dieses Wertes ist.

    Geht es auch mittels eines einzigen Querys?

    Mein Versuch war:
    Code:
    mysql_query("DELETE FROM table WHERE id < MAX(id) - 10");
    -> geht leider nicht.

  • #2
    Bisher habe ich es so gelöst, dass ich zunächst per select die größte ID auslesen und dann per PHP 10 subtrahiere und mit neuem Query per DELETE alles lösche was kleiner dieses Wertes ist.
    Mal drüber nachgedacht, was passiert, wenn du zwichenzeitlich schon Einträge gelöscht hast???

    DELETE FROM ... ORDER BY ... LIMIT ...

    Kommentar


    • #3
      Mal drüber nachgedacht, was passiert, wenn du zwichenzeitlich schon Einträge gelöscht hast???
      Nö.

      Laut MySQL-Dokumentation kann ich für LIMIT nur die Anzahl der zu löschenden Zeilen angeben. Da ich nicht weiß, wie viele Einträge meine Tabelle hat, bringt mich das also nicht weiter. Oder doch?

      Kommentar


      • #4
        Die könnte man ja rausfinden, oder?

        Kommentar


        • #5
          und wie geht das alles in einem Query?

          Kommentar


          • #6
            Warum muss sowas in einer Query erfolgen? Wird das dadurch performanter?

            Kommentar


            • #7
              Na, ich hatte es gehofft. Wenn nicht, dann nicht.

              Es wäre in erster Linie übersichtlicher für mich, da ich es für mehrere Tabellen machen will. Es würde den Programmcode reduzieren.
              Zuletzt geändert von Boron; 24.08.2008, 16:13.

              Kommentar


              • #8
                http://dev.mysql.com/doc/refman/5.0/en/select.html
                To retrieve all rows from a certain offset up to the end of the result set, you can use some large number for the second parameter. This statement retrieves all rows from the 96th row to the last:

                SELECT * FROM tbl LIMIT 95,18446744073709551615;
                sieht zwar nicht schön aus, sollte aber funktionieren.
                absteigend sortieren und limit bis "unendlich" angeben.

                Kommentar

                Lädt...
                X