2011-08-13 3 views
0

をさかのぼる必要です。 SELECTの際PHPは、MySQL DBを助けると私は開始時刻と終了時刻を記載したDB内の2つのフィールドを持ち、またはそれは「日付」と呼ばれる設定されていないこともあり、別のフィールド

は、私は、時間帯に出入りしていますかどうかを知る必要があり、そして日付が設定されている場合、私は、時間帯にいる場合は、日付が今日の場合のみ。

PHPでそれを行うための最善の方法は何ですか?

ありがとうございます! SELECTの際

答えて

2

私のオリジナルの答えは、私が実現し、すべてのあなたの質問に答えていませんでした。 PHPから日付が(「HM-S」)の範囲内にある場合には、そうでない場合は、文字列「notInRange」を返しますと、レコードの上に一致する文字列「INRANGE」を返しますうまくいけば、この意志。

$query = "SELECT IF(".date('H-m-s')." BETWEEN start-time AND end-time, 
'inRange', 'notInRange') WHERE `date` == CURRENT_DATE OR `date` IS NULL"; 

日付がNULLまたは現在の日付であるdb内

あなたはまた、このようなSQL文の作成ができますので、私は構文を使用して、あまりにも慣れていないよ

SELECT IF(TIME(CURRENT_TIMESTAMP) BETWEEN start-time AND end-time, 'inRange', 
'notInRange') WHERE myDate == CURRENT_DATE OR myDate IS NULL; 
+0

を結果を返す、行ごとに実行された場合は、「INRANGE」のように見え、「notInRange」 。結果はどこに置かれていますか?ありがとう! – Ted

+0

それはフィールド 'myDate'記録に一致します - 私はあなたが' date'を呼び出します数える - (CURRENT_DATEに設定されているいずれかのhttp://dev.mysql.com/doc/refman/5.5/en/date- and-time-functions.html#function_current-date)、NULLの場合、これらのIF条件を実行し、一致する各レコードに対して 'inRange'または 'noInRange'を返します。結果を処理するときに、レコードを識別するために、単に「INRANGE」/「noInRange」より多くのデータが必要な場合は、単に、通常、例えばそれを追加することができます'select col1、col2 if()...'。 mysql_query/mysqli_queryを使用してPHPで実行すると、応答がオブジェクトとして取得されます。 – johangu

+0

これは素晴らしいです、ありがとう! – Ted

2

、私は)私が

SELECT (NOW() BETWEEN date_min AND date_max) is_happening_now 
    FROM your_table 

中または時間範囲外だ場合NOW場合is_happening_nowは(真含むブール値が含まれています知っている必要がありdate_minとdate_maxの間にあります。もちろん、それはあなたが必要な場合は、WHERE句で条件を置くことができ、必要ないかもしれません別の列を作成します。

今日が今日の場合のみ、時間範囲内にある場合は日付が設定されています。

私は本当にこの部分を理解していなかったが、あなたは(たとえば、DATE関数でDATETIMEから日付を抽出することができます:current_date = DATE(some_date)

関連する問題