Datensätze ab xx Zeilen löschen

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

  • Datensätze ab xx Zeilen löschen

    Ich möchte gerne alle älteren Datenbankeinträge nach 500 Zeilen löschen lassen.
    Wie kann ich das mit php realisieren?
    Die Datenbank Tabellen sehen so aus:
    user_0001_phps
    user_0002_phps
    user_0003_phps
    user_0004_phps
    user_0005_phps
    user_00xx_phps

    Die Tabellen bestehen aus folgenden Spalten:
    id | enabled | type | url | hits | since | title | timestamp
    Die Löschung soll bei allen Tabellen die Zeilen löschen die die Zahl xxx überschreitet, da diese Tabellen nun langsam volllaufen.
    Am besten nach timestamp sortiert.

  • #2
    PHP-Code:
    $sql "DELETE FROM xxx WHERE zahl > wert" 
    The Human Mirror - Mein Blog!
    www.sonicsense.de - The future of music!

    Kommentar


    • #3
      Die Tabellen haben ja keine fortlaufende ID. Deswegen sollte ja auch nach timestamp sortiert werden und die xxx neuesten Einträge sollten drinbleiben.

      Kommentar


      • #4
        Ab Version 4 kannst du mit ORDER BY und LIMIT arbeiten, wenn ich mich recht entsinne.

        Alternativ ermittelst du die ID der neuesten 500 Beiträge und löschst alle anderen
        Code:
        NOT IN (1, 5, 18, ...)
        Oder du setzt ein Löschkennzeichen
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          Code:
          DELETE FROM `Tabelle`
          ORDER BY timestamp
          LIMIT 50
          Schon mal an sowas gedacht?
          gruss Chris

          [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

          Kommentar


          • #6
            SELECT COUNT(timestamp) AS ct FROM tabelle
            DELETE FROM tabelle ORDER BY timestamp LIMIT $ct-500 OFFSET 0

            Kommentar


            • #7
              Original geschrieben von onemorenerd
              SELECT COUNT(timestamp) AS ct FROM tabelle
              DELETE FROM tabelle ORDER BY timestamp LIMIT $ct-500 OFFSET 0
              Wieso so umständlich?
              gruss Chris

              [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

              Kommentar


              • #8
                Dein SELECT löscht die ältesten 50 Datensätze.

                Wenn du 530 Datensätze hast, hast du danach noch 480.
                Es sollen aber immer die 500 neusten sein...
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  Ok das ist ein Argument...
                  gruss Chris

                  [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

                  Kommentar


                  • #10
                    SELECT COUNT(timestamp) AS ct FROM tabelle
                    DELETE FROM tabelle ORDER BY timestamp LIMIT $ct-500 OFFSET 0

                    Klappt leider nicht.
                    $ct wird zwar richtig angegeben, aber irgendwie klappt es mit dem löschen nicht.

                    DELETE FROM tabelle ORDER BY timestamp LIMIT 500 OFFSET 0
                    angebe, werden auch keine Einträg gelöscht.
                    Bei :
                    DELETE FROM tabelle ORDER BY timestamp LIMIT 500
                    werden die neuesten Einträge gelöscht
                    ich habe nun:
                    $ct2 = $ct-500
                    DELETE FROM tabelle ORDER BY timestamp ASC LIMIT $ct2
                    genommen, scheint zu klappen, aber ist es auch sauber?

                    Kommentar

                    Lädt...
                    X