Bernd Rössner: Löschen alter posts per Cronjobs!

Hi leute...

...ich habe ein problem und zwar habe ich ein news script, das aber nur die jeweils 100 neusten beiträge anzeigen soll - eigentlich ganz leicht zu lösen mit:

LIMIT 100

per mySQL!

Nur will ich die restlichen aus meiner DB löschen! und zwar per cronjobs! ich weiß aber nicht wie ich das umsetzen kann! wie soll ich denen klar machen immer nur 100 posts zu behalten und überflüssige zu löschen!

würde mich für ein paar tipps sehr dankbar zeigen!

mfg bernd

  1. Hi,

    würde mich für ein paar tipps sehr dankbar zeigen!

    Unterabfragen und der IN-Operator?

    DELETE
     *
    FROM
     USERS
    WHERE
     (User_Name NOT IN
      (
      SELECT TOP 100
       User_Name
      FROM
       USERS
      WHERE
       (User_Name LIKE '%Ludger%')
      )
     )

    Gruss,
    Ludger

    1. Moin!

      Hi,

      würde mich für ein paar tipps sehr dankbar zeigen!

      Unterabfragen und der IN-Operator?

      Zitat aus dem Originalposting:

      "per mySQL!"

      Und damit kannst du deine Abfrage schon direkt wieder auf den Müll schicken, das ist Microsoft-SQL.

      - Sven Rautenberg

      1. Hi,

        Und damit kannst du deine Abfrage schon direkt wieder auf den Müll schicken, das ist Microsoft-SQL.

        aeeh, ja, aber man nennts T-SQL. ('T' steht fuer coole Transaktionen und so)

        Und das Ersetzen der TOP-Klausel durch die LIMIT-Klausel und das Ersetzen des LIKE-Ausdrucks traue ich dem Mann schon zu.

        Spricht sonst irgendwas gegen Unterabfragen und die Verwendung des IN-Operators?

        Gruss,
        ludger

        1. Moin!

          Spricht sonst irgendwas gegen Unterabfragen und die Verwendung des IN-Operators?

          Die Fähigkeit eines durchschnittlich zu erwartenden MySQLs. Üblich ist (auch wegen der Lizenz) bei Hostern Version 3.23.

          - Sven Rautenberg

  2. Moin!

    Nur will ich die restlichen aus meiner DB löschen! und zwar per cronjobs! ich weiß aber nicht wie ich das umsetzen kann! wie soll ich denen klar machen immer nur 100 posts zu behalten und überflüssige zu löschen!

    Wäre es nicht schlauer, exakt dann, wenn eine neue Meldung dazukommt, die älteste Meldung zu löschen? Dann sparst du dir die Sache mit den Cronjobs.

    Ansonsten würde ich vorschlagen:
    SELECT count(*) FROM tabelle;

    -> ergibt eine Zahl.

    DELETE FROM tabelle ORDER BY id LIMIT (zahl - 100);

    id sei hier ein eindeutiges Kriterium der News, welches aufsteigend (aber ggf. auch mit Lücken) vergeben wird. Alternativ würde sich als Sortierkriterium ein Datum (geordnet von alt nach neu) anbieten.

    - Sven Rautenberg