alte daten archivieren!

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

  • alte daten archivieren!

    Hallo und Guten Morgen!

    Also ich will folgendes anstellen:
    ich benutze netbuilder - ich habe das Script erweitert um den "Menüpunkt" Veranstaltungsdatum,d.h. ich kann nun auf meiner Seite anzeigen lassen "Heutige Veranstaltungen".

    Nun wäre es auch schön wenn es ein Archiv auf meinen Seiten gäbe, d.h. dass Daten die schon überfällig sind mittels mysql abfrage von der tabelle nbuilder_article in nbuilder_archiv verschoben werden.
    Nur wie????

    hab mal folgendes probiert geht aber leider nicht(wahrscheinlich weil der Code KOMPLETT falsch ist

    insert into nbuilder_archiv ( `ide`,`title`,`intro`,`content`,`print`,`folder`,`userid`,`datum`,`stage`,`publishfrom`,`publishto`, `mod`,`verdate`) WHERE `verdate` <= now()
    Wäre sehr dankbar für Eure Hilfe!

    LG from .at
    Clemens H.

  • #2
    Daran habe ich mir bei MySQL auch schon die Zähne ausgebissen, da bei MySQL keine herkömmlichen Unterabfragen möglich sind (wie z.B. bei MSSQL).

    Erstmal zu deiner Abfrage.
    Der Zeitvergleich funktioniert so nicht
    [FONT=courier new]
    ... WHERE verdate <= now()
    [/FONT]
    Da NOW() auch die Uhrzeit enthält (z.B. 2002-04-20 21:15:34), ist alles kleinergleich NOW() (aufgrund der Sekunden, logo). Zudem kleinergleich sowieo jetzt und davor bedeutet .

    Wenn du alle Datensätze in die andere Tabelle rüberschieben willst, die nicht von heute sind, mußt du CURDATE() in folgender Art benutzen:
    [FONT=courier new]
    ... WHERE verdate < curdate()
    [/FONT]
    Allerdigs solltest du beachten, daß du zusätzlich alle archivierten Daten aus der Originaltabelle löschst, sonst werden die bereits archivierten Datensätze beim erneuten kopieren doppelt in die Archivtabelle kopiert.
    Ich kann dir bei dem Problem mit einem PHP-Script weiterhelfen.

    PHP-Code:
    // Alle Datensätze, die nicht von heute sind, suchen
    $sql_quelle "SELECT * FROM nbuilder_article WHERE verdate < curdate()";
    $result mysql_query($sql_quelle,$db);

    // Die gefundenen Datensätze in Archiv schreiben
    while ($show mysql_fetch_array($result)) {
    $sql_ziel  "
    INSERT INTO nbuilder_archiv SET
    ide='
    $show[ide]',
    title='
    $show[title]',
    intro='
    $show[intro]',
    verdate='
    $show[verdate]'
    "
    ;
    mysql_query($sql_ziel,$db); }

    // kopierte Datensätze in Originaltabelle löschen
    $sql_delete "DELETE FROM nbuilder_article WHERE verdate < curdate()";
    mysql_query($sql_delete,$db); 
    Immer erst mal gucken, ob Benzin im Tank ist ...

    Kommentar


    • #3
      INSERT INTO archiv SELECT * FROM artikel WHERE datum<Schwelle

      Damit werden alle Datensätze aus artikel bei denen das datum kleiner ist als Schwelle in die Tabelle archiv eingefügt.
      Dafür ist es nötig, dass es die selben Felder gibt.
      Ansonsten:

      INSERT INTO archiv (feld,feld2) SELECT feld1,feld2 FROM artikel WHERE datum<Schwelle

      und dann die Artikel löschen
      DELETE FROM artikel WHERE datum<Schwelle
      Zuletzt geändert von Troublegum; 28.04.2002, 11:39.
      [color="#334D7B"]"Los, lass uns loslegen! Hm ? Quatschen können wir hinterher immer noch!"[/color]
      [color="#9C5245"]"Aber Bommel, wir können jetzt nicht bumsen. Wir müssen doch erst den Kindern - ... "[/color]
      [color="#334D7B"]"Ja ja ja. Du willst immer nur das Eine. Buchstabenzeigen, Buchstabenzeigen - meine Gefühle sind dir wohl scheißegal."[/color]

      © Harald Schmidt

      Kommentar


      • #4
        cool.. )

        Hey Danke das geht einwandfrei!!

        VIELEN DANK!!

        Aber noch ne Frage

        Geht das automatisch auch?? nicht wirklich oder? ich könnte es nur in eine Seite einbauen und wenn die dann aufgerufen wird(zb: Titelseite der Veranstaltungsübersicht) wird dann der Befehl ausgeführt, oder?

        Mein Provider hat zwa "Chron Jobs" im Angebot(www.all-inkl.com) aber leider nicht in meinem Webspace Paket((

        LG
        Clemens

        Kommentar


        • #5
          Klar, kannst du das in eine Seite einbauen, ist ja kein Problem.
          Mit CronJobs wäre es natürlich ideal, aber du kannst es auch in eine Seite einbauen, die ab und zu aufgerufen wird.
          Wenn niemand die Seite lädt, merkt auch niemand, dass das Archiv nicht geändert wurde, oder ?
          Also ist das doch kein Problem.
          [color="#334D7B"]"Los, lass uns loslegen! Hm ? Quatschen können wir hinterher immer noch!"[/color]
          [color="#9C5245"]"Aber Bommel, wir können jetzt nicht bumsen. Wir müssen doch erst den Kindern - ... "[/color]
          [color="#334D7B"]"Ja ja ja. Du willst immer nur das Eine. Buchstabenzeigen, Buchstabenzeigen - meine Gefühle sind dir wohl scheißegal."[/color]

          © Harald Schmidt

          Kommentar


          • #6
            Troublegum, bist du sicher daß diese Abfrage bei MySQL funktioniert?
            [FONT=courier new]
            INSERT INTO archiv SELECT * FROM artikel WHERE datum<Schwelle
            [/FONT]
            Wäre mir neu.
            Immer erst mal gucken, ob Benzin im Tank ist ...

            Kommentar


            • #7
              Das geht schon mit mySQL. Irgendwo hab ich auch mal gelesen, dass das eigentlich gar kein richtiger Subselect ist, moment, ich suche das mal...

              EDIT: Klicke bitte mal hier.
              [color="#334D7B"]"Los, lass uns loslegen! Hm ? Quatschen können wir hinterher immer noch!"[/color]
              [color="#9C5245"]"Aber Bommel, wir können jetzt nicht bumsen. Wir müssen doch erst den Kindern - ... "[/color]
              [color="#334D7B"]"Ja ja ja. Du willst immer nur das Eine. Buchstabenzeigen, Buchstabenzeigen - meine Gefühle sind dir wohl scheißegal."[/color]

              © Harald Schmidt

              Kommentar


              • #8
                jegliche Freude schon wieder weg

                Hi!

                Das Script ist schon mal gelaufen-hab ich ja auch geschrieben.
                Jetzt habs ichs erweitert, dass auch alle Tabellen kopiert werden und plötzlich tut sich garnichts.
                Ich hab jetzt absichtlich ein paar "Datums" zurückgesetzt - die sollten ins Archiv gehen.. es tut sich aber nichts! why?

                PHP-Code:
                <html>
                <head>
                <title></title>
                </head>
                <body>
                <?
                require("root.inc");
                require($include."db.php");
                include($include."config.ini");
                include($include."lang.ini");
                // Alle Datensätze, die nicht von heute sind, suchen
                $sql_quelle = "SELECT * FROM nbuilder_article WHERE verdate < curdate()";
                $result = mysql_query($sql_quelle,$db);

                // Die gefundenen Datensätze in Archiv schreiben
                while ($show = mysql_fetch_array($result)) {
                $sql_ziel  = "
                INSERT INTO nbuilder_archiv SET
                ide='$show[ide]',
                title='$show[title]',
                intro='$show[intro]',
                content='$show[content]',
                print='$show[print]',
                folder='$show[folder]',
                userid='$show[userid]',
                datum='$show[datum]',
                stage='$show[stage]',
                publishfrom='$show[publishfrom]',
                publishto='$show[publishto]',
                mod='$show[mod]',
                verdate='$show[verdate]'
                ";
                mysql_query($sql_ziel,$db); }

                // kopierte Datensätze in Originaltabelle löschen
                $sql_delete = "DELETE FROM nbuilder_article WHERE verdate < curdate()";
                mysql_query($sql_delete,$db);
                // 5. Schließen der MySQL-Verbindung:
                mysql_close;
                ?>
                </body></html>
                Ciao
                Clemens

                Kommentar


                • #9
                  Bekommst du von der 1. Query überhaupt Ergebnisse ?
                  Check das ab.

                  Ansonsten:
                  Warum nimmst du nicht einfach folgende Query ?


                  INSERT INTO archiv SELECT * FROM artikel WHERE datum<Schwelle
                  Da sparst du dir viel Arbeit.
                  [color="#334D7B"]"Los, lass uns loslegen! Hm ? Quatschen können wir hinterher immer noch!"[/color]
                  [color="#9C5245"]"Aber Bommel, wir können jetzt nicht bumsen. Wir müssen doch erst den Kindern - ... "[/color]
                  [color="#334D7B"]"Ja ja ja. Du willst immer nur das Eine. Buchstabenzeigen, Buchstabenzeigen - meine Gefühle sind dir wohl scheißegal."[/color]

                  © Harald Schmidt

                  Kommentar


                  • #10

                    es geht*aufholzgeht*
                    vielen Dank!

                    Lg CLemens

                    Kommentar


                    • #11
                      Bei mir funktionierts nicht.
                      Aber ich glaube, MySQL hat dieses Feature erst ab Version 4 hinzugefügt. Ich arbeite allerdings noch mit einer 3.x Version.
                      Immer erst mal gucken, ob Benzin im Tank ist ...

                      Kommentar


                      • #12
                        Original geschrieben von mkJack
                        Bei mir funktionierts nicht.
                        Aber ich glaube, MySQL hat dieses Feature erst ab Version 4 hinzugefügt. Ich arbeite allerdings noch mit einer 3.x Version.
                        Also ich hab nicht mySQL 4 sondern 3.x und es geht.
                        die genaue version hab ich nicht im Kopf.
                        [color="#334D7B"]"Los, lass uns loslegen! Hm ? Quatschen können wir hinterher immer noch!"[/color]
                        [color="#9C5245"]"Aber Bommel, wir können jetzt nicht bumsen. Wir müssen doch erst den Kindern - ... "[/color]
                        [color="#334D7B"]"Ja ja ja. Du willst immer nur das Eine. Buchstabenzeigen, Buchstabenzeigen - meine Gefühle sind dir wohl scheißegal."[/color]

                        © Harald Schmidt

                        Kommentar


                        • #13
                          irgendwie klappt was nicht....

                          Hallo an alle!


                          Wie man in den vorhergegangen Messages lesen kann habe ich ja mein Problem ein Archiv zu erstellen gelöst.
                          Dennoch traten wieder Probleme auf

                          In meinem "Veranstaltungskalender" kommen auch Termine vor die allgemein gültig sind, d.h. ohne konkreten "Ablaufdatum".
                          Nun dachte ich mir damit die Daten nicht ins Archiv kommen, setze ich den Wert für "verdate"(nachdem ja die Daten aussortiert werden) auf 20021231 - also Jahresende 2002.

                          NUR irgendwie scheint das nicht zu klappen, weil jetzt keine Daten lz. phpmyadmin gefunden werden. Die Abfrage kann man durchführen-keine Fehler-nur findet er keine Daten.
                          Hier nochmal die Abfrage:

                          PHP-Code:
                          <?
                          require("root.inc");
                          require($include."db.php");
                          include($include."config.ini");
                          include($include."lang.ini");
                          // Alle Datensätze, die nicht von heute sind, suchen
                          $sql_quelle = "INSERT INTO nbuilder_archiv SELECT * FROM nbuilder_article WHERE verdate<curdate()";
                          mysql_query($sql_quelle,$db);

                          // kopierte Datensätze in Originaltabelle löschen
                          $sql_delete = "DELETE FROM nbuilder_article WHERE verdate<curdate()";
                          mysql_query($sql_delete,$db);
                          // 5. Schließen der MySQL-Verbindung:
                          mysql_close;
                          ?>
                          Ich verwende netbuilder.
                          Ich bin total ratlos warum das nicht geht.

                          Liebe Grüße
                          Clemens Heisinger

                          Kommentar


                          • #14
                            @Troublegum

                            Jepp, du hast recht, es geht doch. Beim Ausprobieren auf meiner 3.x MySQL-Version war ich wohl einfach zu dumm das "richtig" zu testen ...
                            Immer erst mal gucken, ob Benzin im Tank ist ...

                            Kommentar

                            Lädt...
                            X