0

我有一个数组$members,其中包含IDtable 中的一些(最多 6 个)users。使用以下代码,我遍历 的每个索引$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&插入到另一个 TABLE中,格式如下:(左侧是我的 TABLE )namesregisterrowsregister

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 语句?

4

2 回答 2

0

没有尝试过,但无论如何这是我的答案:)

$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])";
}

然后尝试执行查询..

于 2013-02-07T16:50:56.397 回答
0

您是否对数组执行其他任何操作,或者您只是从一个表中检索它以便将其插入到另一个表中?

如果是这样,那么您可以这样做。

$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');

您可以看到第一种方式,即您在一个语句中选择和插入,更好更容易,所以如果您不对数组做任何其他事情,那么我强烈建议您这样做。

于 2013-02-07T17:16:22.260 回答