2016-07-28 3 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-07-01 --- Пропущенные
2016-07-02 --- Пропущенные
2016-07-03 --- OK
2016-07-04 --- Пропущенные
2016-07-05 --- Пропущенные
2016-07-06 --- Пропущенные
2016-07-07 --- Пропущенные
2016-07-08 --- Пропущенные
2016-07-09 --- Пропущенные
2016-07-10 --- Пропущенные
2016-07-11 --- Пропущенные
2016-07-12 --- Пропущенные
2016-07-13 --- Пропущенные
2016-07-14 --- Пропущенные
2016-07-15 --- Пропущенные
2016-07-16 --- Пропущенные
2016-07-17 --- Пропущенные
2016-07-18 --- Пропущенные
2016-07-19 --- Пропущенные
2016-07-20 --- Пропущенные
2016-07-21 --- Пропущенные
2016-07-22 --- Пропущенные
2016-07-23 --- Пропущенные
2016-07-24 --- Пропущенные
2016-07-25 --- Пропущенные
2016-07-26 --- Пропущенные
2016-07-27 --- Пропущенные
2016-07-28 --- Пропущенные
2016-07-29 --- Пропущенные
2016-07-30 --- Пропущено
2016-07-31 --- Пропущено

+3

Я не понимаю, что вы пытаетесь задать, пожалуйста, уточните свой вопрос дальше. – Janno

+0

Не закрывайте свой первый цикл while, закройте его в конце – Rijin

+0

не изменилось, я попробовал это –

ответ

0

Ваш вопрос трудно понять, но насколько я понимаю tand, вы пытаетесь проверить, есть ли запись для итерации даты или нет.

Главное, что вы пропустили, вы только сохраняете единственную дату на переменной $date. Уточнить;

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 
*/ 

После этой части кода ваша проверка «ОК» действительна только для «2016-07-03». Чтобы исправить код, вы должны иметь массив для хранения всех дней и использовать функцию in_array() для проверки существования.

Другой альтернативой является применение этих процедур внутри цикла while после изменения направления ORDER BY. Если две последовательные записи не являются последовательными днями, вы заполняете итерацию этого разрыва (второго уровня).

Смежные вопросы