2017-03-12 4 views
1

私は私のテーブルにこれらの3つの異なる配列を挿入しようとしている:そう、PHPのmysqlの、3種類の配列(異なる長さの1)からデータを挿入する

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)は常に異なる長さですが、2番目の配列($arrayData)と3番目の配列($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); 

問題は、私が唯一の最初の配列の最後の番号を取得することです。

ご協力いただきありがとうございます。

答えて

1

forループの外エコー$ sqlをけれども

$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); 
+0

私はそれがとても簡単だとは信じられません!本当にありがとうございます。それはうまく働いています – Motorui

+0

私は私の答えでINSERTの重複部分を見逃しました。よくやった :) – icecub

0

非常に簡単です。各ループの変数$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); 

?> 
+0

INSERT INTO文を置きます。クエリ全体を出力しますが、データは挿入されません。ご協力ありがとうございました。私はRafiqのアプローチで行くつもりです。 – Motorui

+0

@Motoruiうん、私はINSERT重複部分を見逃した。私の悪い。 – icecub

関連する問題