Wählen Sie Datensätze von heute, dieser Woche, diesem Monat aus php mysql

Lesezeit: 5 Minuten

Ich stelle mir das ziemlich einfach vor, komme aber nicht drauf. Ich versuche, ein paar Seiten zu erstellen – eine, die Ergebnisse enthält, die aus der Tabelle meiner MySQL-Datenbank für heute, diese Woche und diesen Monat ausgewählt wurden. Die Daten werden bei der Datensatzerstellung mit eingetragen date('Y-m-d H:i:s');. Hier ist, was ich bisher habe:

Tag wo Datum>(Datum-(60*60*24))

 "SELECT * FROM jokes WHERE date>(date-(60*60*24)) ORDER BY score DESC"

Woche wo Datum>(Datum-(60*60*24*7))

 "SELECT * FROM jokes WHERE date>(date-(60*60*24*7)) ORDER BY score DESC"

Monat (30 Tage) wobei Datum>(Datum-(60*60*24*30))

 "SELECT * FROM jokes WHERE date>(date-(60*60*24*30)) ORDER BY score DESC"

Irgendwelche Ideen würden sehr geschätzt. Vielen Dank!

Angenommen, Ihre Datumsspalte ist eine tatsächliche MySQL-Datumsspalte:

SELECT * FROM jokes WHERE date > DATE_SUB(NOW(), INTERVAL 1 DAY) ORDER BY score DESC;        
SELECT * FROM jokes WHERE date > DATE_SUB(NOW(), INTERVAL 1 WEEK) ORDER BY score DESC;
SELECT * FROM jokes WHERE date > DATE_SUB(NOW(), INTERVAL 1 MONTH) ORDER BY score DESC;

  • Also habe ich es in datetime geändert und nichts getan und es funktioniert. Vielen Dank!

    – Andreas Samuelsen

    13. März 2011 um 23:39 Uhr

  • @NathanOstgard Ich versuche die gleiche Abfrage für einen Monat … aber füge ein weiteres AND hinzu und es funktioniert nicht … so: SELECT id,title,start_date FROM events WHERE start_date > DATE_SUB(NOW(), INTERVAL 1 MONTH) AND city ​​= ‘Khobar’ ORDER BY start_date DESC….irgendeine Idee warum?

    – sys_debug

    2. August 2012 um 9:07 Uhr

  • Würde dies nicht zu einem schwebenden Ergebnissatz führen, wenn Sie beispielsweise 1 Tag von jetzt abziehen, wird es um 2 Uhr morgens einen anderen Ergebnissatz geben als den Ergebnissatz von 20 Uhr?

    – Kevin Bowersox

    25. Juli 2013 um 23:53 Uhr

  • Das wird nur 1 Woche abziehen, oder? Was ist mit der aktuellen Woche?

    – C4d

    24. August 2015 um 6:51 Uhr

  • Ich bin verwirrt: Zeigt dies tatsächlich die Daten für DIESE Woche oder MAXIMAL vor einer Woche an?

    – qwertzman

    21. August 2017 um 13:26 Uhr

Versuchen Sie es mit Datums- und Zeitfunktionen (MONTH(), YEAR(), DAY(), MySQL-Handbuch)

In dieser Woche:

SELECT * FROM jokes WHERE WEEKOFYEAR(date)=WEEKOFYEAR(NOW());

Letzte Woche:

SELECT * FROM jokes WHERE WEEKOFYEAR(date)=WEEKOFYEAR(NOW())-1;

  • Es muss intern eine Umwandlung durchgeführt werden, da dies nur die Leistung bei großen Ergebnismengen beeinträchtigt.

    – Kevin Bowersox

    25. Juli 2013 um 23:57 Uhr

  • Was passiert, wenn die aktuelle Woche Woche 1 ist? dauert es automatisch die letzte Woche des Vorjahres?

    – Michael Kampmann Rasmussen

    2. Juli 2015 um 12:52 Uhr

  • das ist bei weitem die beste antwort

    – Krummen

    12. Oktober 2015 um 16:54 Uhr

  • Die beste Antwort, aktualisieren Sie sie bitte auf SELECT * FROM Witze WHERE WEEKOFYEAR (date) = WEEKOFYEAR (NOW ()) AND YEAR (date) = YEAR (now ()); Daten älterer Jahre auszuschließen.

    – Firas Abd Alrahman

    20. September 2016 um 21:04 Uhr


  • Danke Kumpel, das ist der richtige Weg, es zu tun.

    – Amit Kumar

    2. Mai 2018 um 9:41 Uhr

Aktueller Monat:

SELECT * FROM jokes WHERE YEAR(date) = YEAR(NOW()) AND MONTH(date)=MONTH(NOW());

Diese Woche:

SELECT * FROM jokes WHERE WEEKOFYEAR(date) = WEEKOFYEAR(NOW());

Heutige Tag:

SELECT * FROM jokes WHERE YEAR(date) = YEAR(NOW()) AND MONTH(date) = MONTH(NOW()) AND DAY(date) = DAY(NOW());

Dadurch wird nur der aktuelle Monat, die wirkliche Woche und wirklich nur heute ausgewählt 🙂

  • Vielen Dank. Diese Lösung hat für mich perfekt funktioniert, als ich einige benutzerdefinierte Ranglisten erstellt habe.

    – Bonxi

    12. März 2015 um 0:10 Uhr

  • Für die aktuelle Woche verwenden YEARWEEK, denn wenn Sie beispielsweise Daten aus den Jahren 2016, 2017 und 2018 mit demselben Wochendatum in Ihrer Tabelle haben, werden nur die Wochendaten von 2018 angezeigt. Mit WEEKOFYEAR es werden Wochendaten von 2016, 2017 und 2018 angezeigt.

    – mattja

    21. Februar 2018 um 5:23 Uhr


Nathans Antwort gibt Ihnen Witze der letzten 24, 168 und 744 Stunden, NICHT die Witze von heute, dieser Woche, diesem Monat. Wenn es das ist, was Sie wollen, großartig, aber ich denke, Sie suchen vielleicht nach etwas anderem.

Wenn Sie seinen Code verwenden, erhalten Sie um 12.00 Uhr die Witze, die gestern um 12.00 Uhr beginnen und heute um 12.00 Uhr enden. Wenn Sie die heutigen Witze wirklich wollen, versuchen Sie Folgendes:

SELECT * FROM jokes WHERE date >= CURRENT_DATE() ORDER BY score DESC;  

Sie müssten etwas anders machen als die aktuelle Woche, den Monat usw., aber Sie verstehen schon.

Benutzer-Avatar
KarlosFontana

Jeder scheint sich darauf zu beziehen, dass das Datum eine Spalte in der Tabelle ist.
Ich denke nicht, dass dies eine gute Praxis ist. Das Wort Datum könnte nur ein Schlüsselwort in einer Programmiersprache (vielleicht Oracle) sein, also ändern Sie bitte den Spaltennamen date in vielleicht JDate.
Also wird das Folgende besser funktionieren:

SELECT * FROM jokes WHERE JDate >= CURRENT_DATE() ORDER BY JScore DESC;

Wir haben also eine Tabelle namens Jokes mit den Spalten JScore und JDate.

Benutzer-Avatar
JoeGalind

Eine bessere Lösung für “heute” ist:

SELECT * FROM jokes WHERE DATE(date) = DATE(NOW())

Nathans Antwort ist sehr nah dran, wird jedoch eine schwebende Ergebnismenge zurückgeben. Wenn sich die Zeit verschiebt, werden Datensätze von und auf die Ergebnismenge verschoben. Verwendung der DATE() Funktion an NOW() entfernt das Zeitelement vom Datum und erstellt eine statische Ergebnismenge. Seit der date() Funktion angewendet wird now() statt der eigentlichen date Die Spaltenleistung sollte höher sein, da eine Funktion wie z date() in eine Datumsspalte verhindert die Fähigkeit von MySQL, einen Index zu verwenden.

Um die Ergebnismenge statisch zu halten, verwenden Sie:

SELECT * FROM jokes WHERE date > DATE_SUB(DATE(NOW()), INTERVAL 1 DAY) 
ORDER BY score DESC;

SELECT * FROM jokes WHERE date > DATE_SUB(DATE(NOW()), INTERVAL 1 WEEK) 
ORDER BY score DESC;

SELECT * FROM jokes WHERE date > DATE_SUB(DATE(NOW()), INTERVAL 1 MONTH) 
ORDER BY score DESC;

  • Ja, aber das ist immer noch nicht diese Woche – wenn die Woche am Montag beginnt und wir diese Auswahl am Dienstag machen, werden wir Witze vom letzten Dienstag (letzte Woche) bekommen, nicht von diesem Montag, denn das ist diese Woche nach richtiger Logik.

    – Jaroslav Štreit

    22. Mai 2014 um 8:29 Uhr

1337290cookie-checkWählen Sie Datensätze von heute, dieser Woche, diesem Monat aus php mysql

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy