MySQL: daten aus tabelle löschen und in andere schreiben
willie
- php
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
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
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
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
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