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