2016-07-28 9 views
0

DBには、26日と31日がありますが、OKに変更されていません。 3日目になり、[OK]に変更します。PHP MYSQLの日付範囲が逃した日

ここで私はこのコードで間違っていますか?

コード:

*$from = date("Y-m-01"); 
$to  = date("Y-m-t"); // last day current month 
$query = "SELECT date FROM tbl_data WHERE date BETWEEN '$from' AND '$to' order by date DESC"; 
$result = mysqli_query($mysqli,$query); 
while ($row = mysqli_fetch_array($result, MYSQL_ASSOC)) 
{ 
    $date = date_create_from_format('Y-m-d', $row['date']); 
} 
$cursor = date_create_from_format('Y-m-d', $from); 
$finish = date_create_from_format('Y-m-d', $to); 
while ($cursor != $date) 
    { 
     echo date_format($cursor,'Y-m-d') . "--- Missed <br>"; 
     date_modify($cursor, '+1 day'); 

      while($cursor == $date) 
       { 
        echo date_format($date,'Y-m-d') . "--- OK <br>"; 
        date_modify($cursor, '+1 day'); 
       } 
      while($cursor > $finish) 
       { 
        die(); 
       } 
}* 

出力:

2016年7月1日---
2016年7月2日不在--- OK ---
2016年7月3日不在
2016年7月7日不在
2016年7月6日不在
2016年7月4日---
2016年7月5日不在--- --- ---
を逃しました不在
2016年7月11日逃した
2016年7月10日逃した
2016年7月9日不在2016年7月8日--- --- --- ---
2016年7月12日--- ---
2016年7月13日逃した
2016年7月14日逃した---
2016年7月15日逃した---
2016年7月16日逃した---
不在
2016年7月20日逃した
2016年7月19日逃した
2016年7月18日逃した2016年7月17日は--- --- --- ---
を逃しました不在
2016年7月24日逃した
2016年7月23日逃した
2016年7月22日不在2016年7月21日--- --- --- ---
2016年7月25日--- ---
2016年7月26日逃した
2016年7月27日逃した---
2016年7月28日逃した---
2016年7月29日逃した---
不在2016-07-30 ---逃した
2016-07-31 ---逃した

+3

私はあなたが尋ねようとしているものが得られないので、あなたの質問をさらに詳しく説明してください。 – Janno

+0

最初のwhileループを閉じずに最後を閉じます – Rijin

+0

変更しませんでした –

答えて

0

あなたの質問は分かりにくいが、あなたは反復された日付のレコードがあるかどうかをチェックしようとしています。

あなたが欠落した主な点は、変数$dateに1つの日付しか格納していないことです。明確にするために;このコード部分の後

while ($row = mysqli_fetch_array($result, MYSQL_ASSOC)) 
{ 
    $date = date_create_from_format('Y-m-d', $row['date']); 
} 

/* at this point of code, your variable $date is exactly equal to 2016-07-03 
* because you sorted all existing dates in descending order and last record is 2016-07-03 
*/ 

、あなたの「OK」チェック「は2016年7月3日」のためにのみ有効です。コードを修正するには、すべての日を格納する配列を持ち、in_array()関数を使用して存在を確認する必要があります。

ORDER BY方向を変更した後、ループ中にこれらのプロシージャを適用することもできます。 2つの連続したレコードが連続した日でない場合は、これらのギャップ(第2レベル)の繰り返しを記入します。

関連する問題