2017-01-10 9 views
1

最近、私はこの質問(Converting day of week to dates for the current month with MYSQL & PHP)を投稿し、多くの有益な回答を得ました。PHPを使用した配列とMySQLクエリの日付の比較と出力

私はこれに基づいてさらに何かをしたいと思いますが、もう一度私の知識の限界に達し、いくつかのガイダンスを探しています。

目的: 私は今週の定期的なイベント/出席を持っています。これは、上記のおかげで今月の日付と一致して表示できます。また、私はこれらの毎週の定期的なイベント/出席のキャンセル/日付変更のデータベースを持っています。

私はこれらの2つを1つのテーブルに表示するには一致させたいと思います。あなたは、私がモバイルのためにこれを作ってるんだ見ることができるように

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>"; 
     } 

    } 
} 

データの最初のセットは、配列に格納されている

は、ここに私の最初の部分のコードです。私は何をする必要があると仮定すると、2つ目の段階で配列に物事を入力し、それらの2つの配列の情報を比較し、1つにマージし、最初のものに対応する別の配列を持っている"欠席"した後、新しい配列をマスターリストに出力しますか?

これは正しいですか?このコードを動作させる方法を概念化するのに問題があります。

ありがとうございます。

答えて

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>"; 
     } 

    } 
} 

これはおそらくそれを行うにはクリーンな方法ではありませんが、できます。私は、日付に設定されたキーと出席(出席、不在、不確実)を参照している値に設定された値を持つ配列に日付を入れます。両方のクエリの日付(通常の出席結果と不規則な予約)が配列に格納され、ksortを使用して日付順に並び替えられ、次に予約状況に基づいて出力されます。