2017-01-10 53 views
1

最近我发布了这个问题(Converting day of week to dates for the current month with MYSQL & PHP),并得到了很多有用的回复。使用PHP比较和输出数组中的日期和MySQL查询

我想在此基础上做更多的事情,但是又要达到我的知识极限,并且正在寻找一些指导。

目的: 我有每周重复活动/出席,我可以匹配和显示当前日期由于上述。此外,我还有一个取消/更改这些每周重复活动/出席日期的数据库。

我想匹配这两个显示在一张表中。

这里的现状:

enter image description here

正如你可以看到我在做这个移动。目前,我会在底部显示设置的时间表,底部显示取消(红色)和对其他事件(绿色)的一次性保留。

这是我的用于第一部分的代码:

$sql = "SELECT StudentDB.studentid, ClassDB.classID, ClassDB.class_level, ClassDB.class_title, ClassDB.time, ClassDB.teacher, StudentDB.first_name, StudentDB.last_name, StudentDB.payment_amount, ClassDB.day 
FROM ClassDB 
INNER JOIN RegDB ON ClassDB.classID = RegDB.classid 
INNER JOIN StudentDB ON StudentDB.studentID = RegDB.studentid 
WHERE StudentDB.studentid = '$studentid'"; 


$result = $conn->query($sql); 



if ($result->num_rows > 0) { 
    echo "<table class='table table-hover'>"; 
    echo "<tr><th colspan=2 class='text-center'>固定レッスン</th></tr><tr><th>クラス</th><th>開始時間</th></tr>"; 


    // output data of each row 
    while($row = $result->fetch_assoc()) { 

     $dayofclass = $row['day']; 
     echo "<tr><td>".$row["class_level"]." ".$row["class_title"]."</td><td>".$row['day']." ".$row['class_time']." " .$row['time']. "</td></tr>"; 

    } 

    $n=date('t',strtotime($date)); // find no of days in this month 

    $yearmonth = date("Y-m-"); 

    $dates=array(); 
    for ($i=1;$i<=$n;$i++){ 

     if ($i<10) { 
      $i = "0" . $i; 
     } 

     $day=date("l",strtotime($yearmonth.$i)); //find weekdays 


     if($day==$dayofclass){ 
      $dates[]=$yearmonth.$i; 
     } 
    } 

    $arrlength = count($dates); 
    for($x = 0; $x < $arrlength; $x++) { 
     $y = $x +1; 
     echo "<tr><td>Week ".$y."</td><td>".$dates[$x]."</td></tr>"; 
    } 



    echo "</table>"; 
} 

和代码的第二部分:

$sql = "SELECT AttendanceDB.*, ClassDB.* 
FROM StudentDB 
INNER JOIN AttendanceDB ON StudentDB.studentid = AttendanceDB.studentid 
INNER JOIN ClassDB ON AttendanceDB.classid = ClassDB.classID 
WHERE StudentDB.studentid = '$studentid' AND AttendanceDB.class_time >= '$date'"; 



$result = $conn->query($sql); 



if ($result->num_rows > 0) { 
    echo "<table class='table table-hover'>"; 
    echo "<tr><th colspan=2 class='text-center'>振替の予定</th></tr><tr><th>クラス</th><th>開始時間</th></tr>"; 


    // output data of each row 
    while($row = $result->fetch_assoc()) { 

     $phpdate = strtotime($row["class_time"]); 
     $mysqldate = date('Y-m-d', $phpdate); 

     if ($row["furikae"] == 3){ 
     echo "<tr class=success><td>振替(".$row["class_level"]." ".$row["class_title"].")</td><td>".$mysqldate." " .$row['time']. "</td></tr>"; 
     } elseif ($row["furikae"] == 8) { 
      echo "<tr class=warning><td>承認待ち</td><td>".$mysqldate." " .$row['time']. "</td></tr>"; 
     } elseif ($row["furikae"] == 2) { 
      echo "<tr class=danger><td>休み</td><td>".$mysqldate." " .$row['time']. "</td></tr>"; 
     } 

    } 
} 

的第一组数据被存储在数组中。我假设我需要做的是在第二阶段将数据输入到一个数组中,然后比较这两个数组中的信息,将它们合并为一个数组,将另一个数组与第一个数组对应,第一个数组标记第一个数据“缺席”,然后将新阵列输出到主列表中?

这是正确的吗?我很难概念化如何使代码工作。

在此先感谢。

回答

1

花了一些时间教育自己,并用这个(查询1)想出了:

if ($result->num_rows > 0) { 
    echo "<table class='table table-hover'>"; 
    echo "<tr><th colspan=2 class='text-center'>固定レッスン</th></tr><tr><th>クラス</th><th>開始時間</th></tr>"; 


    // output data of each row 
    while($row = $result->fetch_assoc()) { 

     $dayofclass = $row['day']; 
     echo "<tr><td>".$row["class_level"]." ".$row["class_title"]."</td><td>".$row['day']." ".$row['class_time']." " .$row['time']. "</td></tr>"; 

    } 

    $n=date('t',strtotime($date)); // find no of days in this month 

    $yearmonth = date("Y-m-"); 

    $dates=array(); 
    for ($i=1;$i<=$n;$i++){ 

     if ($i<10) { 
      $i = "0" . $i; 
     } 

     $day=date("l",strtotime($yearmonth.$i)); //find weekdays 


     if($day==$dayofclass){ 
      $dates[]=$yearmonth.$i; 
      $datesdata[$yearmonth.$i] = "0"; 
     } 
    } 





    echo "</table>"; 
} 

(查询2):

if ($result->num_rows > 0) { 
    echo "<table class='table table-hover'>"; 
    echo "<tr><th colspan=2 class='text-center'>今月の予定</th></tr><tr><th>クラス</th><th>開始時間</th></tr>"; 


    // output data of each row 
    while($row = $result->fetch_assoc()) { 

     $phpdate = strtotime($row["class_time"]); 
     $mysqldate = date('Y-m-d', $phpdate); 



     if ($row["furikae"] == 3){ 
      $dates[]=$mysqldate; 
      $datesdata[$mysqldate] = "1"; 
     } elseif ($row["furikae"] == 8) { 
      $dates[]=$mysqldate; 
      $datesdata[$mysqldate] = "3"; 
     } elseif ($row["furikae"] == 2) { 
      $dates[]=$mysqldate; 
      $datesdata[$mysqldate] = "2"; 
     } 

    } 



    ksort($datesdata); 
    foreach ($datesdata as $key => $val) { 
     if ($val == 0){ 
      echo "<tr><td>参加予定</td><td>".$key."</td></tr>"; 
     } elseif ($val == 1) { 
      echo "<tr class='success'><td>振替参加予定</td><td>".$key."</td></tr>"; 
     } elseif ($val == 2) { 
      echo "<tr class='danger'><td>休み予定</td><td>".$key."</td></tr>"; 
     } elseif ($val == 3) { 
      echo "<tr class='warning'><td>キャンセル待ち</td><td>".$key."</td></tr>"; 
     } 

    } 
} 

这可能不是做最彻底的方法,但有用。我把日期放到一个数组中,其中的键设置为日期,并将数值设置为参考出席人数(参加,缺席,不确定)。将两个查询的日期(常规出勤结果和不定期保留)放入数组中,然后使用kso​​rt按日期重新排序,然后根据保留状态输出。