【问题标题】:Php mysql, inserting data from 3 different arrays (one with different length)php mysql,从 3 个不同的数组中插入数据(一个不同的长度)
【发布时间】:2017-03-12 02:28:48
【问题描述】:

我正在尝试将这 3 个不同的数组插入到我的表中:

Array
(
    [0] => 1
    [1] => 2
)
Array
(
    [0] => 2017-01-01
    [1] => 2017-01-02
    [2] => 2017-01-03
    [3] => 2017-01-04
    [4] => 2017-01-05
    [5] => 2017-01-06
    [6] => 2017-01-07
    [7] => 2017-01-08
    [8] => 2017-01-09
    [9] => 2017-01-10
    [10] => 2017-01-11
    [11] => 2017-01-12
    [12] => 2017-01-13
    [13] => 2017-01-14
    [14] => 2017-01-15
    [15] => 2017-01-16
    [16] => 2017-01-17
    [17] => 2017-01-18
    [18] => 2017-01-19
    [19] => 2017-01-20
    [20] => 2017-01-21
    [21] => 2017-01-22
    [22] => 2017-01-23
    [23] => 2017-01-24
    [24] => 2017-01-25
    [25] => 2017-01-26
    [26] => 2017-01-27
    [27] => 2017-01-28
    [28] => 2017-01-29
    [29] => 2017-01-30
    [30] => 2017-01-31
)
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 3
    [4] => 3
    [5] => 3
    [6] => 1
    [7] => 2
    [8] => 4
    [9] => 4
    [10] => 4
    [11] => 4
    [12] => 1
    [13] => 2
    [14] => 3
    [15] => 3
    [16] => 3
    [17] => 3
    [18] => 1
    [19] => 2
    [20] => 4
    [21] => 4
    [22] => 4
    [23] => 4
    [24] => 1
    [25] => 2
    [26] => 3
    [27] => 3
    [28] => 3
    [29] => 3
    [30] => 1
)

数组中填充了一些 sql 选择查询,因此第一个数组 ($arrayUsers) 的长度始终不同,但第二个 ($arrayData) 和第三个 ($arrayTurno) 的长度始终相同。

我想要这样的东西:

|id(first array)|date(second array)|shift(third array)|
|1              |2017-01-01        |1                 |
|1              |2017-01-02        |2                 |
|1              |2017-01-03        |3                 |
|1              |2017-01-04        |3                 |
|...            |...               |...               |
|2              |2017-01-01        |1                 |
|2              |2017-01-02        |2                 |
|2              |2017-01-03        |3                 |
|2              |2017-01-04        |3                 |
|...            |...               |...               |

等等。

我正在尝试使用以下代码:

foreach($arrayUsers as $user) {

    $sql = "INSERT INTO `escala`(`id_assistente`, `id_data`, `id_horario`) VALUES";

    for ($i = 0; $i < count($arrayTurno); $i++) {
        $sql .= "('$user', '$arrayData[$i]','$arrayTurno[$i]'),";
    }

}

$sql = rtrim($sql, ',');
echo $sql;
$result = mysqli_query($conn,$sql);

问题是我只得到第一个数组中的最后一个数字。

提前感谢您的帮助。

【问题讨论】:

    标签: php mysql arrays


    【解决方案1】:

    INSERT INTO 语句放在for 循环之外

    $sql = "INSERT INTO `escala`(`id_assistente`, `id_data`, `id_horario`) VALUES";
        foreach($arrayUsers as $user) {             
            for ($i = 0; $i < count($arrayTurno); $i++) {
                $sql .= "('$user', '$arrayData[$i]','$arrayTurno[$i]'),";
            }
        }
        $sql = rtrim($sql, ',');
        echo $sql;
        $result = mysqli_query($conn,$sql);
    

    【讨论】:

    • 我不敢相信它这么容易!非常感谢你。它工作正常
    • 我错过了答案中的 INSERT 重复部分。干得好:)
    【解决方案2】:

    这很简单。您只会得到最后一个结果,因为您要在每个循环上重置 $sql 变量。每次循环通过这部分时:$sql = "INSERT ... 它会从前一个循环中删除已经存在的任何内容。试试这样吧,它会像魅力一样工作:

    <?php
    
    $arrayUsers = '';// array here
    $arrayData = '';// array here
    $arrayTurno = '';// array here
    $sql = '';
    
    foreach($arrayUsers as $user){
        foreach($arrayData as $arrayDataKey => $arrayDataValue){
            $sql .= "INSERT INTO `escala`(`id_assistente`, `id_data`, `id_horario`) VALUES";
    
            $sql .= "('". $user ."', '". $arrayDataValue ."','". $arrayTurno[$arrayDataKey] ."'),";
        }
    }
    
    $sql = rtrim($sql, ',');
    echo $sql;
    $result = mysqli_query($conn,$sql);
    
    ?>
    

    【讨论】:

    • 虽然 echo $sql;打印整个查询,它不插入任何数据!谢谢您的帮助。我会采用 Rafiq 的方法。
    • @Motorui 是的,我错过了 INSERT 复制部分。我的错。
    猜你喜欢
    • 2022-01-15
    • 1970-01-01
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 2015-09-09
    • 1970-01-01
    相关资源
    最近更新 更多