SQL: Wenn Datensatz älter als . dann
Guten Morgen werte Community,
habe den Auftrag erhalten, eine kleine Userdatenbank für ein Portal zu bauen.
Das klappt auch recht gut, dafür dass ich kein gelernter Entwickler bin. Jedoch hänge ich nun einige Zeit an einem, für mich größerem, Problem.
Derzeit verwende ich MariaDB auf einer Ubuntu-Minimal VM.
Sobald ein Datensatz angelegt wird, erhält er in der Spalte "registered" das aktuelle Datum + Zeitstempel. (YYYY-MM-DD 00:00:00)
Jetzt sollte ich dafür Sorge tragen, dass gewisse Datensätze automatisch gelöscht / inaktiv gesetzt werden nach idR. 1 Monat; 3 Monate und 6 Monate.
Google brachte so manches Ergebnis, jedoch habe ich es entweder nicht so richtig verstanden was überhaupt passiert oder es einfach nicht wie gewünscht funktioniert. (Testdatenbank angelegt)
Der Zeitraum wird aktuell manuell gesetzt bzw. per Script und händische Auswahl. -Dieser Datensatz bekommt dann die Spalte: "valid" und dort steht da derzeit ganz unprofessionell "1 Monat". (kann nach belieben geändert werden da nur interne Verarbeitung)
Nun meine Frage: wie könnte man dies automatisieren? (automatische Abfrage alle 10 Minuten, ob der Datensatz noch gültig ist (in Bezug auf Erstelldatum), falls nicht: dann ...DEL oder Update (inactive)
Geregelt wird fast alles über PHP.
Würde mich freuen, hier etwas Unterstützung zu finden.
Danke und Grüße
PixL
Edit: SELECT * FROM tabelle WHERE DATEDIFF(feld_mit_datum, NOW()) >= 14
Führt mich leider nicht zum gewünschten Erfolg.
habe den Auftrag erhalten, eine kleine Userdatenbank für ein Portal zu bauen.
Das klappt auch recht gut, dafür dass ich kein gelernter Entwickler bin. Jedoch hänge ich nun einige Zeit an einem, für mich größerem, Problem.
Derzeit verwende ich MariaDB auf einer Ubuntu-Minimal VM.
Sobald ein Datensatz angelegt wird, erhält er in der Spalte "registered" das aktuelle Datum + Zeitstempel. (YYYY-MM-DD 00:00:00)
Jetzt sollte ich dafür Sorge tragen, dass gewisse Datensätze automatisch gelöscht / inaktiv gesetzt werden nach idR. 1 Monat; 3 Monate und 6 Monate.
Google brachte so manches Ergebnis, jedoch habe ich es entweder nicht so richtig verstanden was überhaupt passiert oder es einfach nicht wie gewünscht funktioniert. (Testdatenbank angelegt)
Der Zeitraum wird aktuell manuell gesetzt bzw. per Script und händische Auswahl. -Dieser Datensatz bekommt dann die Spalte: "valid" und dort steht da derzeit ganz unprofessionell "1 Monat". (kann nach belieben geändert werden da nur interne Verarbeitung)
Nun meine Frage: wie könnte man dies automatisieren? (automatische Abfrage alle 10 Minuten, ob der Datensatz noch gültig ist (in Bezug auf Erstelldatum), falls nicht: dann ...DEL oder Update (inactive)
Geregelt wird fast alles über PHP.
Würde mich freuen, hier etwas Unterstützung zu finden.
Danke und Grüße
PixL
Edit: SELECT * FROM tabelle WHERE DATEDIFF(feld_mit_datum, NOW()) >= 14
Führt mich leider nicht zum gewünschten Erfolg.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 367984
Url: https://administrator.de/contentid/367984
Ausgedruckt am: 22.11.2024 um 03:11 Uhr
6 Kommentare
Neuester Kommentar
Hallo PixL,
auf Linux-Basis würde ich einen Cron-Job anlegen, der mir vielleicht 1 x am Tag ein Update/Delete-SQL-Statement ausführt.
Übrigens kann Dein WHERE-Bedingung nichts liefern, da DATEDIFF einen negativen Wert ergibt.
Du musst entweder die Reihenfolge im DATEDIFF tauschen oder den Operator ändern.
G LianenSchwinger
auf Linux-Basis würde ich einen Cron-Job anlegen, der mir vielleicht 1 x am Tag ein Update/Delete-SQL-Statement ausführt.
Übrigens kann Dein WHERE-Bedingung nichts liefern, da DATEDIFF einen negativen Wert ergibt.
Du musst entweder die Reihenfolge im DATEDIFF tauschen oder den Operator ändern.
G LianenSchwinger
Hallöchen.
Wollte mich selber etwas dazu belesen weil ich meinte das seine Anforderungen und sein Query nicht zusammenpassen.
MariaDB - create-event
Aber weiterführend heist es dort ja:
~Arano
wenn es in MariaDB EVENTS gibt.
Jup, gibt es.Wollte mich selber etwas dazu belesen weil ich meinte das seine Anforderungen und sein Query nicht zusammenpassen.
MariaDB - create-event
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 12 HOUR
AT
If you want to execute the event only once (one time event), [...]
Das war mein Gedanke: es läuft nur einmal.If you want to execute the event only once (one time event), [...]
Aber weiterführend heist es dort ja:
You can also specify that an event must be triggered at a regular interval (recurring event). In such cases, use the
EVERY
clause followed by the interval.~Arano
Als alternativen Ansatz würde ich die Datensätze um eine valid_to spalte ergänzen. In dieser steht dann das Ablaufdatum.
Bei Abfragen auf die Tabelle kann dann das Datum am Abfragetag mit dem valid_to Feld verglichen werden.
Zeigt alle Datensätze die aktuell noch gültig sind. Dies in eine VIEW gepackt und schon kann mit den Daten weitegearbeitet werden.
Greetz
thejoker2305
Bei Abfragen auf die Tabelle kann dann das Datum am Abfragetag mit dem valid_to Feld verglichen werden.
SELECT * from TABELLE where valid_to > now() or valid_to is null
Greetz
thejoker2305