簡體   English   中英

使用 PHP 從數組和 MySQL 查詢中比較和輸出日期

[英]Comparing and outputting dates from an array and a MySQL query using PHP

最近我發布了這個問題( 使用 MYSQL 和 PHP 將星期幾轉換為當月的日期)並得到了許多有用的答復。

我想以此為基礎,做更多的事情,但又一次達到了我的知識極限,正在尋找一些指導。

目的:我有每周重復發生的事件/出勤,由於上述原因,我能夠將其與當月的日期匹配並顯示。 此外,我有這些每周定期活動/出勤的取消/日期更改數據庫。

我想將這兩個匹配以顯示在一張表中。

這是目前的情況:

在此處輸入圖片說明

正如你所看到的,我正在為移動設備做這個。 目前我在頂部顯示設定的時間表,底部顯示取消(紅色)和對其他事件的一次性預訂(綠色)。

這是我的第一部分代碼:

$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):

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 按日期重新排序,然后根據預約狀態輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM