willie: MySQL: daten aus tabelle löschen und in andere schreiben

hallo in die runde!

ich möchte alte daten aus einem terminkalender löschen und die daten in eine andere tabelle schreiben. über das schreiben in ein array und danach auslesen funktioniert das soweit...

1. nun möchte ich aber meine db-abfragen möglichst klein halten. gibt es  da eine idee, ohne über mysql_fetch_array() (oder ähnlich) zu gehen? zb. indem sowas funxen würde wie folgender kauderwelsch:

mysql_query("DELETE * FROM termin WHERE zeit='abgelaufen' AND INSERT datum,ort,etc INTO termin_bac");

wobei der hase hier wohl beim 'AND' im pfeffer liegt ;-)

2. lässt sich da mit mysql_unbuffered_query() deutlich was an datenverarbeitung sparen? (so richtig ist mir die anwendbarkeit dieser funktion nicht klar)

danke für euer verständnis und eure tipps!
willie

  1. Hallo willie

    mysql_query("DELETE * FROM termin WHERE zeit='abgelaufen' AND INSERT datum,ort,etc INTO termin_bac");

    wobei der hase hier wohl beim 'AND' im pfeffer liegt ;-)

    Natürlich geht das nicht, wie Du Dir ja schon selbst gedacht hast.
    Es wäre eine weitere Bedingung innerhalb der WHERE-Klausel.

    Zusätzlich ist Deine Reihenfolge verkehrt, Du musst Deine Daten
    zuerst sichern, erst danach darfst Du sie löschen.

    Bei MySQL heißt die normale Syntax übrigens:

    DELETE FROM termin WHERE ...
    also ohne *, was auch logisch ist, denn entweder wird ein Datensatz gelöscht oder nicht.

    Prinzipiell gesehen möchtest Du zwei Anweisungen zusammenfassen. Dazu kannst Du sie in
    eine Transaktion fassen. Stored Procedures gibt es meines Wissens in MySQL (noch) nicht.

    Freundliche Grüsse,

    Vinzenz

    1. hallo,

      Prinzipiell gesehen möchtest Du zwei Anweisungen zusammenfassen. Dazu kannst Du sie in
      eine Transaktion fassen.

      wenn das meine lösung sein könnte, hätte ich hier gern noch etwas mehr an erklärung.

      danke & mfg
      willie

  2. yo,

    ich möchte alte daten aus einem terminkalender löschen und die daten in eine andere tabelle schreiben. über das schreiben in ein array und danach auslesen funktioniert das soweit...

    vielleicht ist das ja was für dich....

    INSERT INTO tabelle_neu (spalte1, spalte2...) VALUES (SELECT spalte1, spalte2.. FROM tabelle_alt WHERE zeit='abgelaufen');

    DELETE FROM tabelle_alt WHERE zeit='abgelaufen';

    Ilja

    1. hallo
      und danke für die unterstützung!

      ich war einem gehirnkollaps aufgesessen und hatte vergeblich versucht, was zu INSERT DELETE zu finden. was zu keinem rechten ergebnis führen wollte... gemeint hatte ich selbstmurmelnd INSERT SELECT: http://www.mysql.de/doc/de/HANDLER.html

      noch mal schnell fürs archiv meine ausführliche ausführung ;-)
      ('tabelle' und 'tabelle_bac' sollen existente tabellen sein; 'datum', 'ort', 'etc' zu sichernde spalten)

      $mon_f = date("Y-m-d", mktime(0,0,0,date("n"),1,date("Y"))); //erster  akt. monat

      mysql_unbuffered_query("INSERT INTO termin_bac SELECT datum,ort,etc FROM date AS x WHERE x.datum < '$mon_f'") or die("Kopieren fehlgeschlagen: ". mysql_error()); //kopieren beim ersten aufruf d. monats
      if(mysql_affected_rows()>0) { //nur ausgeführt, wenn kopiert wurde
      mysql_query("DELETE FROM termin WHERE datum < '$mon_f'") or die("Löschen fehlgeschlagen: ". mysql_error()); //löschen der daten
      mysql_query("OPTIMIZE TABLE termin") or die("Optimieren der Tabelle fehlgeschlagen: ". mysql_error()); //optimieren der geleerten tab.
      }

      mfg willie