获取数据并使用循环(MSQL/I)插入


Get data and insert it using loop (MSQL/I)

我从表A中选择数据,我想要的是使用循环插入该数据。

这是我的代码:

    $getlvls = "SELECT * FROM `access_chart` WHERE `ac_id`='$data->ac_id'";
    $qry99 = $con->query($getlvls);
    while($row = $qry99->fetch_assoc()) {
        $lvl1 = $row['lvl1'];
        $lvl2 = $row['lvl2'];
        $lvl3 = $row['lvl3'];
        $lvl4 = $row['lvl4'];
    }
    for($jaa = 1; $jaa <=4; $jaa++){
        $auth_id = '$lvl'+$jaa;
        $sql1 = "INSERT INTO `overtime_log`(`ot_id`, `lvl`, `user_id`) VALUES('$ot_id', $jaa, '$auth_id')";
        $qry = $con->query($sql1);
    }

我没有包括我所有的代码。除了使用循环插入列$lvl1$lvl2$lvl3$lvl4之外,一切都正常。或者,如果你能提出其他的逻辑,那就是发现。

提前谢谢。

已编辑

Select the data:
|----------------|
|--access_chart--| TABLE
|----------------|
-------------------
|---------|---------------|--------|--------|--------|--------|
|--ac_id--|--access_name--|--lvl1--|--lvl2--|--lvl3--|--lvl4--|
|---------|---------------|--------|--------|--------|--------|
|    1    |   MIS Dept    |    4   |    5   |    9   |    0   |

This might be the output after INSERT QUERY:

|----------------|
|--overtime_log--| TABLE
|----------------|
-------------------
|---------|-------|-----------|
|--ot_id--|--lvl--|--user_id--|
|---------|-------|-----------|
|    1    |   1   |     4     |
|    1    |   2   |     5     |
|    1    |   3   |     9     |
|    1    |   4   |     0     |

不确定$ot_id是在哪里定义的,但假设您只使用id,并且SQL注入不是问题,则可以使用以下内容:

$getlvls = "SELECT * FROM `access_chart` WHERE `ac_id`='$data->ac_id'";
$qry99 = $con->query($getlvls);
while($row = $qry99->fetch_array())
{
    foreach(array(1=>$row['lvl1'],2=>$row['lvl2'],3=>$row['lvl3'],4=>$row['lvl4']) as $key=>$lvl)
    {
        $sql1 = "INSERT INTO `overtime_log`(`ot_id`, `lvl`, `user_id`) VALUES('$ot_id', $key, '$lvl')";
        $qry = $con->query($sql1);      
    }
}

或者,您可以完全避免内部循环,只需使用多重插入语法编写INSERT:

$getlvls = "SELECT * FROM `access_chart` WHERE `ac_id`='$data->ac_id'";
$qry99 = $con->query($getlvls);
while($row = $qry99->fetch_array())
{
    $con->query("INSERT INTO `overtime_log`(`ot_id`, `lvl`, `user_id`)
    VALUES('$ot_id', 1, '{$row['lvl1']}'),
    ('$ot_id', 2, '{$row['lvl2']}'),
    ('$ot_id', 3, '{$row['lvl3']}'),
    ('$ot_id', 4, '{$row['lvl4']}')");
}