Hallo, ich habe einen PHP-Code, mit dem ich die Zeilen in einer Datenbank der letzten 30 Tage zähle. Das Problem ist, dass, wenn ich den Code so ändere, dass sich die Zahl von -30
zu -20
ändert, die Ausgabezahl von 272
nach 360
geht anstatt runterzugehen.
Hier ist der Code:
%Vor%Es ist besser zu vergleichen
%Vor%statt
%Vor%Im ersten Fall wird die Datumsberechnung nur einmal am Anfang der Abfrage durchgeführt, und die Datenbank kann beliebige Indizes für die Datumsspalte verwenden.
Die zweite Abfrage muss das DATEDIFF
für jede Zeile berechnen, und die Datenbank kann keine Indizes verwenden. Die zweite Abfrage erzwingt einen vollständigen Tabellenscan.
Ich schlage auch vor, dass Sie Ihre Spalte date
nicht aufrufen. Ja, ich weiß, dass Sie den Namen mit Backticks zitieren können, aber das ist einfach chaotisch und wenn Sie es vergessen, werden Ihre Syntaxfehler schwer zu vergessen sein. Erstelle einen aussagekräftigeren Namen für die Spalte. Was für ein Datum ist das? Was bedeutet das Datum?
Wie Sie in der Dokumentation hier sehen können >, die Funktion DATEDIFF
in MySQL sagt Ihnen den Unterschied in Tagen vom ersten Datum bis zum zweiten.
Ihre Abfrage wählt nur alle Zeilen aus, bei denen die Differenz genau 30 Tage beträgt und nicht die, die bis zu 30 Tagen zurückliegen. Es ist also durchaus möglich, dass die Anzahl der Zeilen für das Datum vor 20 Tagen höher ist als vor 30 Tagen. Was Sie am wahrscheinlichsten wollten, war:
%Vor%