Mysql-Ergebnis der letzten 30 Tage erhalten [Duplizieren]

8

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%     
Sam Williams 21.12.2012, 21:06
quelle

4 Antworten

15

Versuchen Sie es

%Vor%

Für Tage, Jahr siehe unten zum Beispiel.

%Vor%

Für Anand, Frage %Vor%     
softsdev 21.12.2012, 21:21
quelle
4

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?

    
Andy Lester 21.12.2012 21:31
quelle
2

Sie können dies stattdessen verwenden:

%Vor%     
aynber 21.12.2012 21:11
quelle
0

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%     
s1lence 21.12.2012 21:11
quelle

Tags und Links