2

今日の日付を基準として 2 つの日付の間のデータを選択するクエリが必要です。

データベースには、「開始」の日時フィールドと「終了」の日時フィールドがあります。

$todays_date = date("Y-m-d H:i:s");

$q = "SELECT * FROM news WHERE `end` >= '" .  $todays_date . "' AND `start` >= '" .  $todays_date . "' ORDER BY id DESC";

問題は、クエリが開始日が今日より後の結果をまだ引き出していることです。それで、クエリを次のように変更しました。

 $q = "SELECT * FROM news WHERE `end` >= '" .  $todays_date . "' AND `start` >= '" .  $todays_date . "' AND `start` <='" . $todays_date . "' ORDER BY id DESC";

これは、今日の日付をリミッターとして使用する 2 つの日時フィールド間でデータを選択する正しい方法ですか?

ありがとう

4

5 に答える 5

5

MySQL の now timedate 関数とBETWEEN演算子を使用できます。

生の SQL:

SELECT * FROM news
WHERE NOW() BETWEEN start AND end;

注: MySQL リソースを提供するサーバーによって使用される、NOW() 関数に影響を与えるデフォルトのタイムゾーンに注意してください。

于 2010-01-05T17:59:36.527 に答える
2

両方の条件で >= があります。

于 2010-01-05T17:43:55.287 に答える
0

私が使用することになったすべての人に感謝します:

select * 
from news 
where start = curdate()

私は試した

SELECT * 
FROM news 
WHERE NOW() BETWEEN start AND end;

そしてそれはほぼ正しく機能しました。同じ日に開始および終了したニュース記事を同時に表示したくありませんでした。

-ティーガン

于 2010-01-05T18:34:40.637 に答える
0

これは私にとってはうまくいきます。select * from news where start between '$range1' and '$range2'

于 2011-08-22T14:44:53.570 に答える
0

mysql 関数 curdate() を使用して日付を 2010-01-05 として取得するか、now() を使用して完全な日時形式 2010-01-05 12:55:09 を取得できます。今日開始するアイテムを検索するか、今すぐ開始するアイテムを検索するかによって異なります。

そして、開始する前に終了するエントリがないと仮定すると、クエリを次のように書き直すことができます。

select * from news where start = curdate()

終了日も再確認することをお勧めします。既に開始されているがまだ終了していないニュース記事のリストを探しているようです。クエリは次のようになります。

select * from news where start < now() and end > now()

私はそれをテストしていませんが、あなたもこれを行うことができるはずです

select * from news where now() between start and end

あなたのマイレージは異なる場合があります。

- マーク

于 2010-01-05T17:59:34.327 に答える