Ich habe eine Spalte in meiner mySQL-Datenbank, die einige Zeilen enthält. Eine dieser Zeilen ist ein DATUM wie folgt:2012-02-01
Was ich erreichen möchte, ist ein SELECT mit PHP nur basierend auf Jahr und Monat.
Die Logik von SELECT lautet wie folgt:
$q="SELECT * FROM projects WHERE Date="SELECT HERE THE SPECIFIC YEAR AND MONTH"";
Der spezifische Monat und das Jahr werden von einer $_POST
Variablen wie dieser übergeben$_POST['period']="2012-02";
Wie kann ich es tun?
Antworten:
quelle
EXTRACT(YEAR_MONTH FROM Date)
?Wenn Sie haben
Finden Sie zuerst den ersten Tag des Monats:
Diese Abfrage verwendet dann einen Index für,
Date
falls Sie einen haben:Man könnte auch inclusive-exklusive Intervalle verwenden, die ziemlich gut arbeiten (Sie müssen nicht zu kümmern , wenn die Spalte
DATE
,DATETIME
oderTIMESTAMP
, noch über die Genauigkeit:Sicherheitswarnung:
Sie sollten diese Werte ordnungsgemäß umgehen oder vorbereitete Anweisungen verwenden. Kurz gesagt, verwenden Sie die heutzutage in PHP empfohlene Methode, um Probleme mit der SQL-Injektion zu vermeiden.
quelle
Bitte schön. Überlassen Sie den Computer PHP und sparen Sie Ihrer DB etwas Arbeit. Auf diese Weise können Sie einen Index für die
Date
Spalte effektiv nutzen .BEARBEITEN
Die Unix-Zeitstempelkonvertierung wurde vergessen.
quelle
$end = strtotime($date .' 1 month - 1 second');
quelle
Angenommen, Sie haben ein Datenbankfeld created_at, in dem Sie den Wert aus dem Zeitstempel entnehmen. Sie möchten ab Erstellungsdatum nach Jahr und Monat suchen.
quelle
Hier finden Sie die Aufzeichnung nach MONAT und DATUM in mySQL
Hier ist Ihr POST-Wert
$_POST['period']="2012-02";
Explodieren Sie den Wert einfach per Bindestrich
$Period = explode('-',$_POST['period']);
Array vom Explosionswert abrufen:
Array ( [0] => 2012 [1] => 02 )
Wert in SQL Query einfügen:
SELECT * FROM projects WHERE YEAR(Date) = '".$Period[0]."' AND Month(Date) = '".$Period[0]."';
Erhalten Sie das Ergebnis von MONAT und JAHR.
quelle
um die Monats- und Jahreswerte aus der Datumsspalte abzurufen
quelle
Sie können dies tun:
quelle
Die Logik wird sein:
Der
LIKE
Bediener wählt alle Zeilen aus, die mit$_POST['period']
dem Bindestrich und dem Tag des Mont beginnenhttp://dev.mysql.com/doc/refman/5.0/en/pattern-matching.html - Einige zusätzliche Informationen
quelle
Hier ist eine Abfrage, die ich verwende und die jeden Datensatz innerhalb eines Zeitraums als Summe zurückgibt.
Hier ist der Code:
Dies listet jedes emp_nr und die Summe der monatlichen Stunden auf, die sie angesammelt haben.
quelle
Sie können dies tun, indem Sie $ q in Folgendes ändern:
quelle
Ja, das funktioniert, aber es wird nur eine Zeile zurückgegeben, während mehrere Zeilen nur mit ausgewählten Spalten abgerufen werden können. Wie bei SELECT Title gibt Date FROM mytable WHERE YEAR (Date) = 2017 AND MONTH (Date) = 09 nur eine Zeile zurück.
quelle