簡體   English   中英

如何遍歷一個SQL表並將值從預定義的表分配給另一個SQL表?

[英]How to iterate through an SQL table and assign values to another SQL table from a predefined table?

我正在創建一個程序,該程序從一個表中獲取當前的輪班制,並根據其userIDaff表中的staffID為用戶提供另一個名為schedule的表中的輪班制。

我只是想讓它在每個日期循環遍歷每個工作人員,並從表中的預設班次中隨機分配一個班次。

我的第一個理論是遍歷userStaff表,在該表中從可用於班次位置的班次數量中隨機抽取一個整數,然后選擇一個,並將其分配到計划表中。 但是,它一直沒有提供任何值,而只是通過一個staffID查找。

我找不到任何如此具體的內容。 我遇到的錯誤是:沒有分配值,並且僅迭代一個用戶ID?

UserStaff表示例:

ID-1,2,3

用戶名-jenk3194,jake1233,rodger1293

位置-BM,CT,CM

班次表示例:

ID-1,2,3

shiftstart-09:00:00、12:00:00、16:00:00

shiftend-17:00:00、21:00:00、00:00:00

移位人員-BM,CT,CM

進度表示例:

ID-1,2,3

staffID-1,2,3

日期-2017-01-01,2017-01-01,2017-01-01

開始時間-12:00:00、16:00:00、09:00:00

結束時間-21:00:00、00:00:00、17:00:00

這是我當前的完整代碼:

$sql = "SELECT * FROM userStaff";

$result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) > 0) 
{
// output data of each row
while($row = mysqli_fetch_assoc($result)) 
{
    $date = "2017-03-13";
    #$date = date("Y-m-d");

    $begin = new DateTime($date);
    $end = new DateTime(date('Y-m-d', strtotime($date . '+ 7 day'))); // you can change + 1 year to what you need

    $interval = new DateInterval('P1D'); // one day
    //$interval = new DateInterval('P1W'); // one week

    $daterange = new DatePeriod($begin, $interval, $end);

    foreach ($daterange as $date) { // loop through dates
        $fDate = $date->format("Y-m-d");
        $rowID = $row['id'];
        $sql = "SELECT position FROM userStaff WHERE id = '$rowID'";
        echo $sql;
        $result = mysqli_query($conn, $sql);
        if (mysqli_num_rows($result) > 0 )
        {
            $int = mt_rand(1, 3);
            $sql = "SELECT * FROM shifts WHERE id = $int AND shiftperson = '".  $row['position'] . "'";
            $result = mysqli_query($conn, $sql);
            if (mysqli_num_rows($result) > 0)
            {
                while ($row = mysqli_fetch_array($result)) {
                    $shiftSt = $row['shiftstart'];
                    $shiftEn = $row['shiftend'];
                    $sql = "INSERT INTO schedule (staffID, cdate, starttime, endtime) VALUES ('$rowID','$fDate','$shiftSt','$shiftEn')";
                    echo $sql . "<br>";
                    if (mysqli_query($conn, $sql)) 
                    {
                        echo "<br>Success<br>";
                    }
                    else
                    {
                        echo "<br>Failure<br>";
                    }
                }
            }
        }
        else
        {
            echo "Failed";
            }
        }
   }
} 
else 
{
    echo "<p>No Results</p>";
}

此處的代碼是包含全年數據的工作代碼。 因此,我數據庫中的所有6位用戶得到2190條結果。 我的預設移位表中的每個位置都有17個結果,因此它遍歷所有這些結果。

#echo "User Schedule Populated";

$sql="SELECT id FROM userStaff";

$result = mysqli_query($conn, $sql); 

$allID = Array();

while ($row=mysqli_fetch_array($result,MYSQLI_ASSOC)) 
{
    $allID[] = $row['id'];

}

foreach($allID as $idR)
{
    $date = "2017-01-01";

    $rowID = $idR;
    echo "RowID: " . $rowID . "<br>";
    echo "Count 1: " . $counter;
    $begin = new DateTime($date);
    $end = new DateTime(date('Y-m-d', strtotime($date . '+ 1 year')));

    $interval = new DateInterval('P1D'); // one day

    $daterange = new DatePeriod($begin, $interval, $end);
    foreach ($daterange as $date)
    {   
        $fDate = $date->format("Y-m-d");
        $counter ++;
        echo "<br> Count 1: " . $counter . "<br>";
        echo "<br>";
        $sql = "SELECT position FROM userStaff WHERE id ='$rowID'";
        echo $sql;

        $result = mysqli_query($conn, $sql);

        $row = mysqli_fetch_array($result, MYSQLI_ASSOC);
        $int = mt_rand(1,17);
        echo "<br>";
        $sql = "SELECT * FROM shifts WHERE shiftnum = '$int' AND shiftperson = '" . $row['position'] . "'";
        $result = mysqli_query($conn, $sql);
        echo $sql;
        $row = mysqli_fetch_array($result, MYSQLI_ASSOC);
        $shiftSt = $row['shiftstart'];
        echo "<br> Shift St: " . $shiftSt;
        $shiftEn = $row['shiftend'];
        echo "<br> Shift En: " . $shiftEn;
        $sql = "INSERT INTO schedule (staffID, cdate, starttime, endtime) VALUES ('$rowID','$fDate','$shiftSt','$shiftEn')";
        echo "<br> Insert: " . $sql;
        mysqli_query($conn, $sql);

    }

}
die();

暫無
暫無

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

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