【问题标题】:How to iterate through an SQL table and assign values to another SQL table from a predefined table?如何遍历一个 SQL 表并将值从预定义的表中分配给另一个 SQL 表?
【发布时间】:2017-03-15 17:51:33
【问题描述】:

我正在创建一个程序,该程序从一个表中获取当前所做的班次,并根据来自 userStaff 表的员工 ID 在另一个名为 schedule 的表中为用户提供班次。

我只是在寻找它在每个日期循环遍历每个工作人员,并从表中的预设班次中给他们一个随机班次。

我的第一个理论是,遍历 userStaff 表,其中一个随机整数来自可用于轮班位置的轮班数量,然后选择一个并将其分配到日程表上。但是,它一直没有任何值,并且只查看一个员工 ID。

我找不到任何与此一样具体的内容。我遇到的错误是:没有分配任何值,并且只迭代了一个用户 ID?

UserStaff 表示例:

ID - 1、2、3

用户名 - jenk3194、jake1233、rodger1293

位置 - BM、CT、CM

班次表示例:

ID - 1、2、3

班次开始 - 09:00:00、12:00:00、16:00:00

shiftend - 17:00:00, 21:00:00, 00:00:00

shiftperson - BM、CT、CM

时间表示例:

ID - 1、2、3

员工 ID - 1、2、3

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

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    这里的代码是包含一整年数据的工作代码。因此,我的数据库中所有 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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-02
      相关资源
      最近更新 更多