[MySQL 4.1] alle datensätzen löschen bis auf die 1000 neusten

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

  • [MySQL 4.1] alle datensätzen löschen bis auf die 1000 neusten

    heyho,

    in wie weit ist es möglich und wenn ja wie, das man aus einer tabelle alle alten datensätze löschen läst, bis auf die 1000 neuesten?

    jemand ne idee?

  • #2
    definiere "alter datensatz".

    Kommentar


    • #3
      naja mal angenommen ich hab ne tabelle mit ca 3000 datensätzen, einmal am tag möchte ich diese jetzt aufräumen so das nur die neusten 1000 übrig bleiben. (ID hat auto_increment) die anzahl der sich in der tabelle befindlichen datensätze varriert aber stark.

      momentan lös ich das noch das pro neuer eintrag ein alter gelöscht wird, ist mir aber zu umständlich da ich nur einmal täglich dort aufräumen möchte.

      Kommentar


      • #4
        DELETE FROM tabelle WHERE id NOT IN (SELECT id FROM tabelle ORDER BY Datum DESC LIMIT 1000)

        Ich glaub NOT IN ist aber nicht sonderlich performant ... müsste man mal ausprobieren, ansonsten eventuell mit php-Füller ein
        LOCK TABLE tabelle
        SELECT GROUP_CONCAT(id SEPARATOR ',') ids FROM tabelle ORDER BY Datum DESC LIMIT 1000;
        DELETE FROM tabelle WHERE id NOT IN ($row['ids']);
        UNLOCK TABLE tabelle
        (ist nur pseudo-Code~)

        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
        Wie man Fragen richtig stellt

        Kommentar


        • #5
          oder auch unsauber ein
          DELETE FROM tabelle ORDER BY Datum DESC LIMIT 1000, 99999999
          *zucks*

          Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

          bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
          Wie man Fragen richtig stellt

          Kommentar


          • #6
            die tägliche löschung bildet wohl in deinem fall keine zeitkritische angelegenheit, so kannst du etwas von ghostgambler vorschlägen nehmen, oder sogar die id des tausendsten eintrags ermitteln und alle ids größer dieser löschen (beachte die atomarität).

            Kommentar


            • #7
              So wie es sich anhört ist deine 1000 nur ein willkürlicher Wert. Und wenn dein Autoincrement wenig Lücken beim Löschen aufweißt, kannst du ja auch alle ID < MAX-1000 löschen. Damit wäre das Löschen natürlich recht zügig.
              Team BashComp

              Kommentar

              Lädt...
              X