2016-03-20 6 views
1

So habe ich den folgenden Code Ausgänge Fein gesammelt und zeigen Sie mir das heutige Datum und das Datum auch vor 10 Monaten:php sql zwischen Datum wählen

$today = date("Y/m/d"); 
$months = date("Y/m/d", strtotime("-10 months")); 

echo $today; // 2016/03/20 
echo "</br>"; 
echo $months; //2015/05/20 

Jetzt versuche ich, den folgenden Code zu verwenden. Ich habe eine 'date_of_test'-Spalte in meiner Datenbank und möchte nur, dass die Schüler in den letzten 10 Monaten getestet wurden. Allerdings bekomme ich keine Ergebnisse, auch wenn es innerhalb der letzten 10 Monate keine Daten in der Datenbank gibt. Wenn ich die Reihenfolge von heute und Monaten tausche, bekomme ich nur Daten zwischen Jan und jetzt. Irgendwelche Ideen?!

+0

Haben Sie versucht, heute Schalen $ und Monate $ in deiner Anfrage? In Ihrer aktuellen Version ist das erste Limit größer als das zweite. Ich bin mir nicht ganz sicher, ob das erlaubt ist. – Gentle153

+0

Versuchen Sie '$ query =" SELECT * FROM year9_records WHERE date_of_test ZWISCHEN date_format (Datum ('$ today'), '% Y /% m /% d') UND date_format (Datum ('$ monates'), '% Y/% m /% d ') ";' – Matt

+0

Vielen Dank. Alle Anfragen haben in Bezug auf die Ausgabe, die ich will, gleich funktioniert !! –

Antwort

1

Ich würde eine SQL-Lösung bevorzugen. Sie können DATE_SUB verwenden:

"SELECT * FROM year9_records WHERE date_of_test >= DATE_SUB(now(), INTERVAL 10 MONTH)"; 

DATE_SUB() Funktion das Intervall von dem angegebenen Datum subtrahiert. In diesem Fall now() - 10 months.

Wenn Sie die PHP-Lösung bevorzugen, und vorausgesetzt, Sie date_of_test als DATE in der Tabelle gespeichert, die am besten geeignete Art und Weise 10 Monate für rückblickend vor wäre:

$tenmonthsback = date("Y-m-d", mktime(0, 0, 0, date("m")-10, date("d"), date("Y"))); 
"SELECT * FROM `year9_records` WHERE `date_of_test` BETWEEN '$today' AND '$tenmonthsback'"; 
1

Wenn Sie das Datum mit der Bedingung testen, müssen Sie das erste Datum auf der linken Seite "Und" haben.

$query = "SELECT * FROM year9_records WHERE date_of_test BETWEEN '$months' AND '$today'" 

es ist gleich:

$query = "SELECT * FROM year9_records WHERE date_of_test >= '$months' AND date_of_test <= '$today'" 

wenn die date_of_test Zeit haben Sie einen Tag hinzufügen müssen alle heute Stunden zu bekommen, nicht nur 00:00

dies lesen: https://docs.oracle.com/cd/B28359_01/server.111/b28286/conditions011.htm

Wenn Sie keine Daten nach heute haben, brauchen Sie nicht zwischen:

$query = "SELECT * FROM year9_records WHERE date_of_test >= '$months'"