Archiv verlassen und diese Seite im Standarddesign anzeigen : alte daten archivieren!
whistler81 28-04-2002, 11:18 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.
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
... WHERE verdate <= now()
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:
... WHERE verdate < curdate()
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.
// 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);
Troublegum 28-04-2002, 12:29 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
whistler81 28-04-2002, 12:35 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 ;)
Troublegum 28-04-2002, 12:39 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.
Troublegum, bist du sicher daß diese Abfrage bei MySQL funktioniert?
INSERT INTO archiv SELECT * FROM artikel WHERE datum<Schwelle
Wäre mir neu.
Troublegum 28-04-2002, 12:51 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 (http://www.php-resource.de/forum/showthread.php?s=&threadid=6412).
whistler81 28-04-2002, 20:31 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?
<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
Troublegum 28-04-2002, 20:37 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. :rolleyes:
whistler81 28-04-2002, 20:53 :)
es geht*aufholzgeht*
vielen Dank!
Lg CLemens
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.
Troublegum 29-04-2002, 16:45 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.
whistler81 01-05-2002, 18:41 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:
<?
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:)
@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 ...:D
|
-
- |