[MySQL] Einträge der letzten 7 Tage
Kyro0
- datenbank
Hallo,
ich würde gerne mit MySQL die Datenbankeinträge der letzten 7 Tage ausgeben lassen. Gibt es dafür einen bestimmten/festen Befehl?
Hello,
ich würde gerne mit MySQL die Datenbankeinträge der letzten 7 Tage ausgeben lassen. Gibt es dafür einen bestimmten/festen Befehl?
Von Haus aus gibt es keine Möglichkeit bei MySQL. Es ist abhängig von Deinem Datenmodell, ob es möglich ist, die Aufgabenstellung zu lösen.
Gibt es denn eine Spalte in der betroffenen Tabelle, in der der Zeitpunkt der Eintragung vermerkt wird?
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hello,
ich würde gerne mit MySQL die Datenbankeinträge der letzten 7 Tage ausgeben lassen. Gibt es dafür einen bestimmten/festen Befehl?
Von Haus aus gibt es keine Möglichkeit bei MySQL. Es ist abhängig von Deinem Datenmodell, ob es möglich ist, die Aufgabenstellung zu lösen.
Gibt es denn eine Spalte in der betroffenen Tabelle, in der der Zeitpunkt der Eintragung vermerkt wird?
Jop, die gibt es. Habe in meiner Tabelle eine Spalte "credate", in der das Erstellungsdatum eingetragen wird.
Jop, die gibt es. Habe in meiner Tabelle eine Spalte "credate", in der das Erstellungsdatum eingetragen wird.
Dannn hast du zumindest die Möglichkeit _diese Tabelle_ entsprechend Zeitlich sortiert, beschränkt auf die letzten 7 Tage auszugeben.
Ich nehme an, dass credate das Erstellungsdatum ist - wenn der Datensatz manipuliert oder entfernt wurde, bekommst du das natürlich nicht mit.
Dannn hast du zumindest die Möglichkeit _diese Tabelle_ entsprechend Zeitlich sortiert, beschränkt auf die letzten 7 Tage auszugeben.
Wie im anderen Eintrag schon gesagt, ich meinte natürlich Tabelleneinträge. Sorry :)
Ich nehme an, dass credate das Erstellungsdatum ist - wenn der Datensatz manipuliert oder entfernt wurde, bekommst du das natürlich nicht mit.
credate = Erstellungsdatum.
Für den Fall, dass ein Datensatz verendet werden sollte, habe ich noch eine weitere Spalte, die mir das letzte Änderungsdatum anzeigt.
Das entfernen von Datensätzen ist, zumindest vom Webinterface her, eh nicht vorgesehen, deswegen hab ich dafür auch keine Spalte...
Hello,
Für den Fall, dass ein Datensatz verendet werden sollte, habe ich noch eine weitere Spalte, die mir das letzte Änderungsdatum anzeigt.
Also "gestorben_am"?
Und wo begräbst Du diese Datensätze dann?
Das entfernen von Datensätzen ist, zumindest vom Webinterface her, eh nicht vorgesehen, deswegen hab ich dafür auch keine Spalte...
Hab ich auch auch irgendwie noch nie gesehen, eine Spalte "geloescht_am", um ein "delete"-date dort drin zu markieren ;-))
Aber BTW: es ist manchmal wirklich sinnvoller, Datensätze im ersten Schritt nicht wirklich zu löschen, sondern nur als gelöscht zu markieren. Das muss dann natürlich bei allen anderen Abragen auch berücksichtigt werden.
Das tatsächliche Löschen kann man dann (z.B. nach einer Kontrolle) in einer Schwachlastzeit der Datenbank durchführen. Bei indizierten Tabellen kann sowas nützlich sein.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hab ich auch auch irgendwie noch nie gesehen, eine Spalte "geloescht_am", um ein "delete"-date dort drin zu markieren ;-))
last_change = zeitpunkt und deleted = 1 sollte reichen.
Einen Datensatz der als "gelöscht" markiert ist, sollte man ohnehin nicht mehr ändern können.
Es kann durchaus sinnvoll sein einen Datensatz nicht (sofort) wirklich zu löschen sondern ihn eben nur zu markieren. Über ein Log lässt sich dann nachvollziehen, wer wann was an dem Datensatz geändert hat und wer ihn gelöscht hat - zur Not lässt er sich auch wiederherstellen.
Aber BTW: es ist manchmal wirklich sinnvoller, Datensätze im ersten Schritt nicht wirklich zu löschen, sondern nur als gelöscht zu markieren.
Ich sollte mir angewöhnen, zuerst den vollständigen Beitrag zu lesen :p
Hello,
Für den Fall, dass ein Datensatz verendet werden sollte, habe ich noch eine weitere Spalte, die mir das letzte Änderungsdatum anzeigt.
Also "gestorben_am"?
Und wo begräbst Du diese Datensätze dann?
Also ich hab da einen extra Händler, der nimmt mir die Toten Datensätze immer ab - was der dann damit macht, weiss ich allerdings auch nicht ;)
Und ja, natürlich meinte ich verändert... ist halt noch früh am Morgen :p
Aber BTW: es ist manchmal wirklich sinnvoller, Datensätze im ersten Schritt nicht wirklich zu löschen, sondern nur als gelöscht zu markieren. Das muss dann natürlich bei allen anderen Abragen auch berücksichtigt werden.
Das tatsächliche Löschen kann man dann (z.B. nach einer Kontrolle) in einer Schwachlastzeit der Datenbank durchführen. Bei indizierten Tabellen kann sowas nützlich sein.
Schon, nur da man bei meinem Webinterface eh die eingetragenen Einträge ändern kann, bin ich mir nicht so ganz sicher, ob ich sowas überhaupt brauche. Aber das ist ein anderes Thema - Die Einträge der letzten 7 Tage sind grad noch ein klein wenig wichtiger :)
Hello,
Gibt es denn eine Spalte in der betroffenen Tabelle, in der der Zeitpunkt der Eintragung vermerkt wird?
Jop, die gibt es. Habe in meiner Tabelle eine Spalte "credate", in der das Erstellungsdatum eingetragen wird.
Dann schau Dir die Datumsfunktionen von MySQL an. Dort findest Du bestimmt eine passende, um sie beim SELECT in die Where-Klausel einzubinden.
http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hi!
ich würde gerne mit MySQL die Datenbankeinträge der letzten 7 Tage ausgeben lassen. Gibt es dafür einen bestimmten/festen Befehl?
Gibt es denn eine Spalte in der betroffenen Tabelle, in der der Zeitpunkt der Eintragung vermerkt wird?
Jop, die gibt es. Habe in meiner Tabelle eine Spalte "credate", in der das Erstellungsdatum eingetragen wird.
Die Datensätze der letzten sieben Tage sind also die, deren credate nicht kleiner ist als jetzt abzüglich 7 Tage.
Und wenn du das auch noch so herum in Syntax formulierst statt "credate plus 7 Tage muss kleiner als jetzt sein", dann freut sich auch die Performance. Im ersten Fall muss die Rechnung (jetzt minus 7 Tage) genau einmal vorgenommen werden und dann kann ein einfacher Vergleich und ein vorhandener Index recht schnell die Datensätze finden. In der zweiten Formulierung muss die Rechnung mit jedem Datensatz einzeln ausgeführt werden.
Lo!
ich würde gerne mit MySQL die Datenbankeinträge der letzten 7 Tage ausgeben lassen. Gibt es dafür einen bestimmten/festen Befehl?
Dazu müsste die Datenbank sämtliche Transaktionen der letzten 7 Tage aufbehalten - je nach Umfang und Art der Transaktionen sind das gigantische Datenmengen.
Ich halte es für unwahrscheinlich, dass es soetwas gibt - lasse mich aber gerne eines besseren belehren.
Eine Gegenfrage: was willst du wirklich?
Sämtliche neuen Einträge in der Datenbank (neue Benutzer, neue Rechte, neue Schemata, neue Tabellen, neue Felder, neue Datensätze, geänderte [bereits genannt], entfernte [bereits genannt]?
ich würde gerne mit MySQL die Datenbankeinträge der letzten 7 Tage ausgeben lassen. Gibt es dafür einen bestimmten/festen Befehl?
Dazu müsste die Datenbank sämtliche Transaktionen der letzten 7 Tage aufbehalten - je nach Umfang und Art der Transaktionen sind das gigantische Datenmengen.
Ich halte es für unwahrscheinlich, dass es soetwas gibt - lasse mich aber gerne eines besseren belehren.
Eine Gegenfrage: was willst du wirklich?
Sämtliche neuen Einträge in der Datenbank (neue Benutzer, neue Rechte, neue Schemata, neue Tabellen, neue Felder, neue Datensätze, geänderte [bereits genannt], entfernte [bereits genannt]?
Hm, hätte ich vielleicht besser "Tabelleineinträge" statt "Datenbankeinträge" schreiben sollen? Weil genau das meine ich. Ich möchte die Tabelleneinträge der letzten 7 Tage haben. Und zwar soll das für eine Datenbank/PHP-Anwendung benutzt werden, in der die Einträge der letzten 7 Tage angezeigt werden. Da im Moment halt alle Einträge der Tabelle angezeigt werden, wollte ich die Liste etwas verkürzen.
Hm, hätte ich vielleicht besser "Tabelleineinträge" statt "Datenbankeinträge" schreiben sollen?
Ja :)