Alles, bis auf die 10 neuesen Datensätze löschen

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

  • Alles, bis auf die 10 neuesen Datensätze löschen

    Hallo


    Also ich hab ne Tabelle, mit id, name und time(mit Timestamp drin)

    Jetzt möchte ich dass wenn es bei einem Namen mehr als 10 Datensätze sind, dass sich dann die Ältesten löschen, und nur die 10 Neuesten übrigbleiben.

    Code:
    $abfrage = "SELECT * FROM tabelle WHERE name = 'Horst'";
    $ergebnis = mysql_query($abfrage)  or die (mysql_error());
    $rows = mysql_num_rows($ergebnis);
    
    if($rows > 10)
    {
        // die ältesten löschen, nur die 10 neuesten übrig lassen
    }

    Ich weiß blos nicht wie das geht.
    Hoff ihr könnt mir helfen

    Gruß
    Wat für'n Scheiß war dat über meine Mucke? Hast'n Problem? ALTA! Schon mal ne 5000-Watt-BASS-Machine gehört? Geht voll ab, Alta!

    Wacken?! Ist schon vorbei du Spasti!

  • #2
    aus der db löschen oder bloß nicht ausgeben?

    Kommentar


    • #3
      nur löschen,

      sodass nur die 10 übrig bleiben, die den größten Timestamp haben

      Gruß
      Wat für'n Scheiß war dat über meine Mucke? Hast'n Problem? ALTA! Schon mal ne 5000-Watt-BASS-Machine gehört? Geht voll ab, Alta!

      Wacken?! Ist schon vorbei du Spasti!

      Kommentar


      • #4
        Original geschrieben von penizillin
        aus der db löschen oder bloß nicht ausgeben?

        Kommentar


        • #5
          löschen
          Wat für'n Scheiß war dat über meine Mucke? Hast'n Problem? ALTA! Schon mal ne 5000-Watt-BASS-Machine gehört? Geht voll ab, Alta!

          Wacken?! Ist schon vorbei du Spasti!

          Kommentar


          • #6
            http://tut.php-q.net/mysql-delete.html

            Kommentar


            • #7
              ich weiß schon wie man Datensätze löscht,

              aber ich blick nicht, wie ich alles lösch auser die neuesten 10.

              kann mir einer helfen bitte.

              Gruß
              Wat für'n Scheiß war dat über meine Mucke? Hast'n Problem? ALTA! Schon mal ne 5000-Watt-BASS-Machine gehört? Geht voll ab, Alta!

              Wacken?! Ist schon vorbei du Spasti!

              Kommentar


              • #8
                Ich würds in zwei schritten machen:
                1. herausfinden welches datum der 10. neuste hat
                2. alle löschen die ein datum drunter haben


                Gruß,
                Click
                Du kannst jeden Tag wie deinen letzten leben, du musst nur jeden Tag das Gleiche tun.

                Denk' mal drüber nach!

                Kommentar


                • #9
                  ermittle die anzahl der datensätze in der tabelle $cnt.
                  berechne $cnt -= 10;
                  Code:
                  DELETE ... ORDER BY datum ASC LIMIT 10, $cnt
                  ob ASC oder DESC, bin mich gerade nicht sicher, überleg mal selbst.

                  Kommentar


                  • #10
                    Original geschrieben von penizillin
                    ermittle die anzahl der datensätze in der tabelle $cnt.
                    berechne $cnt -= 10;
                    Einfach einen sehr hohen zweiten Wert für LIMIT anzugeben, sollte auch tun ...
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      oder lasse die Berechnung weg und verwende 1000 oder mehr/weniger (je nach dem wie viele Einträge du erwartest.) Spart ne Query.

                      Kommentar


                      • #12
                        wollte einigermaßen sauber bleiben.. obwohl.. gibt es in mysql soetwas wie MAX_INTEGER?

                        Kommentar


                        • #13
                          Original geschrieben von penizillin
                          wollte einigermaßen sauber bleiben.. obwohl.. gibt es in mysql soetwas wie MAX_INTEGER?
                          Nicht das ich wüsste ...

                          Die "unsaubere" Vorgehensweise empfiehlt sogar das Manual:
                          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;

                          Allerdings, das ist aus der LIMIT-Beschreibung für SELECT - bei der Beschreibung von DELETE ist nur angegeben, dass man "LIMIT rowcount" benutzen könnte - von einer Verwendung wie bei SELECT ist dort gar keine Rede, also geht's so wohl sowieso nicht.
                          I don't believe in rebirth. Actually, I never did in my whole lives.

                          Kommentar


                          • #14
                            ok, dann die anzahl ermitteln, um 10 verringern, sortieren und mit LIMIT $cnt löschen.

                            Kommentar

                            Lädt...
                            X