次のような SQL クエリを使用しています。
SELECT * FROM game_list
WHERE start_date <= DATE(NOW()) AND end_date >= DATE(NOW())
ORDER BY game_id DESC;
さて、これは実際には何時に始まり、何時に終わりますか? つまり、日付はわかっていますが、時間は何時になりますか? 午前 0 時、午前 12 時、午後、または何ですか?
私が正しく理解していれば、現在の時間が開始時間と終了時間の間にある場合にのみゲームを表示したいのですが、その場合、実際に必要なものは次のとおりです。
SELECT * FROM game_list
WHERE DATE(NOW()) >= start_date AND DATE(NOW()) <= end_date
ORDER BY game_id DESC;
このようにすれば正しく動作するはずです。私が見ることができる唯一の問題は、start_date と end_date を正しくフォーマットしない場合です。
start_date が返すものを再確認し、それに応じて決定します。参照用に、mysql でここの日付と時刻を確認します。
DATE
関数がどのように機能するかを尋ねる場合: 単純に datetime の日付部分を抽出します。
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_dateを参照してください
SELECT DATE('2003-12-31 01:02:03');
-> '2003-12-31
これは単にその日を表しています。再び datetime と見なされると、午前 0 時 (2003-12-31 00:00:00) になります。
次のようなものが欲しいと思います
SELECT * FROM game_list
WHERE start_date <= DATE(NOW()) AND end_date >= DATE_SUB(NOW(), INTERVAL 1 DAY)
ORDER BY game_id DESC;
上記のクエリは、今日より前に開始し、終了日が明日の日付より後のレコードを取得します