wake-up-neo.net

Wählen Sie Datensätze von heute, diese Woche, diesen Monat, PHP mysql

Ich kann mir vorstellen, dass dies ziemlich einfach ist, aber ich kann es nicht verstehen. Ich versuche ein paar Seiten zu erstellen - eine, die Ergebnisse enthält, die aus meiner mysql db-Tabelle für heute, diese Woche und diesen Monat ausgewählt wurden. Die Daten werden eingegeben, wenn der Datensatz mit date('Y-m-d H:i:s'); erstellt wird. Folgendes habe ich bisher:

tag, an dem Datum> (Datum- (60 * 60 * 24))

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

woche wo datum> (date- (60 * 60 * 24 * 7))

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

monat (30 Tage) mit Datum> (Datum- (60 * 60 * 24 * 30))

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

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

65

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;
117
Nathan Ostgard

Verwenden Sie Datums- und Zeitfunktionen (MONTH (), YEAR (), DAY (), MySQL-Handbuch ).

Diese Woche:

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

Letzte Woche:

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

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());

Dies wählt nur den aktuellen Monat, wirklich Woche und wirklich nur heute :-)

36
Lukas Brzak

Nathans Antwort gibt Ihnen Witze aus den letzten 24, 168 und 744 Stunden, NICHT die Witze von heute, diese Woche, diesen Monat. Wenn es das ist, was du willst, toll, aber ich denke, du suchst nach etwas anderem.

Mit seinem Code werden Sie mittags die Witze ab gestern mittags und heute mittag erhalten. 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 in der aktuellen Woche, im aktuellen Monat usw., aber Sie haben die Idee.

9
David van Geest

Jeder scheint darauf zu verweisen, dass das Datum eine Spalte in der Tabelle ist.
Ich glaube nicht, dass dies eine gute Praxis ist. Das Word-Datum ist möglicherweise nur ein Schlüsselwort in einer bestimmten Programmiersprache (möglicherweise Oracle). Ändern Sie daher das Datum der Spaltenbezeichnung in JDate.
.__ Folgendes wird 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.

4
KarlosFontana

Eine bessere Lösung für "heute" ist:

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

Nathans Antwort ist sehr nahe, wird jedoch eine variable Ergebnismenge zurückgeben. Mit der Zeit verschieben sich die Datensätze von und auf die Ergebnismenge. Durch Verwendung der Funktion DATE() für NOW() wird das Zeitelement vom Datum entfernt, wodurch eine statische Ergebnismenge erstellt wird. Da die date()-Funktion auf now() anstelle der tatsächlichen date-Spalte angewendet wird, sollte die Leistung höher sein, da das Anwenden einer Funktion wie date() auf eine Datumsspalte die Fähigkeit von MySql, einen Index zu verwenden, verhindert.

Um die statische Verwendung des Ergebnissatzes beizubehalten:

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;
2
Kevin Bowersox

Nun, diese Lösung hilft Ihnen, nur den aktuellen Monat, die aktuelle Woche und nur heute auszuwählen

SELECT * FROM games WHERE games.published_gm = 1 AND YEAR(addedon_gm) = YEAR(NOW()) AND MONTH(addedon_gm) = MONTH(NOW()) AND DAY(addedon_gm) = DAY(NOW()) ORDER BY addedon_gm DESC;

Für wöchentlich hinzugefügte Beiträge:

WEEKOFYEAR(addedon_gm) = WEEKOFYEAR(NOW())

Für monatlich hinzugefügte Beiträge:

MONTH(addedon_gm) = MONTH(NOW())

Für jährlich hinzugefügte Beiträge:

YEAR(addedon_gm) = YEAR(NOW())

sie erhalten die genauen Ergebnisse, wenn nur die heute hinzugefügten Spiele angezeigt werden. Andernfalls können Sie Folgendes anzeigen: "Keine neuen Spiele für heute gefunden". Die Verwendung von ShowIF-Recordset ist eine leere Transaktion.

0
Al3abMizo Games

Ich denke, die Funktion NOW() ist falsch, um Zeitunterschiede zu erhalten. Denn durch die Funktion NOW() berechnen Sie jedes Mal die letzten 24 Stunden Sie müssen stattdessen CURDATE() verwenden. 

    function your_function($time, $your_date) {
    if ($time == 'today') {
        $timeSQL = ' Date($your_date)= CURDATE()';
    }
    if ($time == 'week') {
        $timeSQL = ' YEARWEEK($your_date)= YEARWEEK(CURDATE())';
    }
    if ($time == 'month') {
        $timeSQL = ' Year($your_date)=Year(CURDATE()) AND Month(`your_date`)= Month(CURDATE())';
    }

    $Sql = "SELECT * FROM jokes WHERE ".$timeSQL
    return $Result = $this->db->query($Sql)->result_array();
}
0
ganji

Daten der letzten Woche in MySQL abrufen. Dies funktioniert für mich auch über die Jahresgrenzen hinweg. 

select * from orders_order where YEARWEEK(my_date_field)= YEARWEEK(DATE_SUB(CURRENT_DATE(), INTERVAL 1 WEEK));

Aktuelle Daten der Woche abrufen 

select * from orders_order where YEARWEEK(date_sold)= YEARWEEK(CURRENT_DATE());
0
Sharad