从另一个SQL表中搜索后,在SQL中插入数据数组


Insert data array in SQL after searching from another SQL table

我有一个数组$members,它包含表users中的一些ID(最多6个)。使用以下代码,我循环遍历$members的每个索引,搜索详细信息并将它们存储在另一个数组中。

        foreach($members as $key=>$value){
            $res = mysql_query("SELECT id,name,email FROM users WHERE id='$value'");
            if ($res === false) {
                echo mysql_error();
                die;
            }
            $row = mysql_fetch_assoc($res);
            if($row['id'])
            {
                $members_name[]=$row['name'];//array for name
            }
        }

现在我想插入ID&存储在阵列中的CCD_ 6以以下格式转换为另一个表CCD_(左侧是我的表register中的rows

mem_0_id-->$members[0]
mem_0_name-->$members_name[0]
mem_1_id-->$members[1]
mem_1_name-->$members_name[1]
mem_2_id-->$members[2]
mem_2_name-->$members_name[2]
mem_3_id-->$members[3]
mem_3_name-->$members_name[3]
mem_4_id-->$members[4]
mem_4_name-->$members_name[4]

我怎样才能以这种方式插入?只使用一个INSERT语句?

还没有尝试过,但这里是我的答案:)

$query = "INSERT INTO register(id, name) VALUES ($members[0], $members_name[0])";
for($i=1; $i<count($members); $i++)
{
    $query .= ", ($members[$i], $members_name[$i])";
}

然后尝试执行查询。。

您对数组做了其他操作吗?还是只是从一个表中检索它以便将它插入另一个表?

如果是这样的话,那么你可以这样做。

$memberIds = implode(',', $members); // comma separated list of member ids
$query = "insert into register (id, name) select id, name from users where id in ($memberIds)";
mysql_query($query); // this will select and insert in one go

如果你确实需要将数组保存在内存中,那么一次将其全部取出仍然是个好主意

$memberIds = implode(',', $members); // comma separated list of member ids
$query = "select id, name from users where id in ($memberIds)";
$res = mysql_query($query);
while ($row = mysql_fetch_assoc($res)) {
    $memberData[] = $row;
}

这是因为在循环中运行查询对性能非常不利。每次运行查询都会有开销,因此一次获取所有数据意味着要一次性而不是多次支付开销。

然后,您可以构建一个语句来插入多行:

$sql = "insert into register (id, name) values ";
$sql .= "(" . $memberData[0]['id'] . "," . $memberData[0]['name'] . ")";
for($i = 1; $i < count($memberData); $i++) {
    $sql .= ",(" . $memberData[$i]['id'] . ",'" . $memberData[$i]['name'] . "')";
}
mysql_query($sql);

因为逗号和引号,这有点令人讨厌,但如果我做得正确,那么如果你做

echo $sql;

你应该买一些类似的东西

insert into register (id, name) values (1, 'john'), (2, 'jane'), (3, 'alice');

您可以看到,第一种方法,即在一个语句中选择并插入,要好得多,也更容易,所以如果您对数组不做任何其他操作,那么我强烈建议您这样做。