2016-07-28 9 views
0

in der DB gibt es auch 26. und 31. Tage, aber nicht zu OK. nur 3. Tag bekommen und auf OK wechseln.PHP MYSQL Datumsbereich verpasste Tage

Wo bin ich falsch in diesem Code?

Code:

*$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(); 
       } 
}* 

Ausgang:

2016-07-01 --- Missed
2016.07.02 --- Missed
2016.07.03 --- OK
2016.07.04 --- Missed
2016.07.05 --- Missed
2016.07.06 --- Missed
2016.07.07 --- Missed
2016.07.08 --- Missed
2016.07.09 --- Missed
2016.07.10 --- Missed
2016.07.11 --- Missed
2016.07.12 --- Missed
2016.07.13 --- Missed
2016.07.14 --- Missed
2016.07.15 --- Missed
2016.07.16 --- Missed
2016.07.17 --- Missed
2016.07.18 --- Missed
2016.07.19 --- Missed
2016.07.20 --- Missed
2016.07.21 --- Missed
2016.07.22 --- Missed
2016.07.23 --- Missed
2016.07.24 --- Missed
2016.07.25 --- Missed
2016.07.26 --- Missed
2016.07.27 --- Missed
2016.07.28 --- Missed
2016.07.29 --- Missed
2016-07-30 --- Verpasst
2016-07-31 --- Verpasst

+3

Ich verstehe nicht, was Sie fragen möchten, bitte erläutern Sie Ihre Frage weiter. – Janno

+0

Schließen Sie Ihre erste while-Schleife dort nicht, schließen Sie sie am Ende. – Rijin

+0

nicht geändert Ich habe versucht, dass –

Antwort

0

Ihre Frage ist schwer zu verstehen, aber so weit ich untermache Und du versuchst zu überprüfen, ob ein Datensatz für das Datum der Wiederholung vorhanden ist oder nicht.

Der wichtigste Punkt, den Sie verpasst haben, ist, dass Sie nur einzelne Daten auf $date Variablen speichern. Um klarzustellen;

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

Nach diesem Codeabschnitt, Ihr „OK“ Scheck ist nur gültig für „2016.07.03“. Um den Code zu korrigieren, sollten Sie ein Array haben, um alle Tage zu speichern und in_array() Funktion zu verwenden, um das Vorhandensein zu überprüfen.

Eine andere Alternative ist die Anwendung dieser Prozeduren innerhalb der while-Schleife nach dem Ändern der ORDER BY-Richtung. Wenn zwei aufeinander folgende Datensätze keine aufeinanderfolgenden Tage sind, füllen Sie diese Lücke (zweite Ebene) Iteration.

Verwandte Themen