查询多条数据后,将数据修改,再将数据插入到另一个数据库的数据表中

时间:2022-12-11 17:12:06
  //转换一个域名下的所有用户信息到另外一个相同表结构的数据库里(另外一个数据库可以在相同或不同服务器上)
//因为每个表的关联id和其他服务器的数据库上的记录有可能相同,所以要求对导入记录所有关联id重新赋值并建立新的关联
//测试例子:把 kit 数据库中域名为10000001.club.cn 的所有用户信息 转换到kit_temp数据库里。

如上所述,怎么实现啊?关键是表多,只转换一个表的数据到另一个数据库中,我是在一个循环中用mysql_select_db在开头选择一个数据库,在结尾再使用mysql_select_db选择另一个数据库,结果是没问题的。因为另一张表是关联这张表的,在循环中再用一个循环后,转换数据就开始乱了,有时这张表能转换,有时那张表能转换;代码中最多有三层嵌套循环。 我把代码贴在下面,各位大侠帮我看看有什么问题,有没有更好的方法。谢谢!

function userinfo_oper()
{
  global $connection1;
  mysql_select_db("mkit",$connection1);
  $query_sel = "SELECT userinfo.* FROM domain,userinfo WHERE domain.name = '10000001.club.cn' 
  and userinfo.domain_id=domain.id";
  $sel_info =mysql_query($query_sel,$connection1) or die("查询mkit库失败!".mysql_error());
  while($result = mysql_fetch_array($sel_info))
    {      
      $id = $result[id];
      maillist_oper($id ); //另一个循环
      mysql_select_db("temp",$connection1);
      $query_ins = "insert into userinfo(domain_id,username,password,mailbox_size,regday,sign,  
      signature ) 
      values ($result[domain_id],'$result[username]','$result[password]',$result[mailbox_size],
      '$result[regday]','$result[sign]','$result[signature]')";
      $ins=mysql_query($query_ins,$connection1) or die("插入temp失败!".mysql_error());
      mysql_select_db("mkit",$connection1);
    }
}

function maillist_oper($userid)
{
  global $connection1;  
  mysql_select_db("mkit",$connection1);
  $query_sel = "select maillist.* from maillist,userinfo where maillist.userinfo_id = 
  userinfo.id and maillist.userinfo_id = $userid";
   $sel_info =mysql_query($query_sel,$connection1) or die("查询mkit库失败!".mysql_error());
  while($result = mysql_fetch_array($sel_info))
    {      
  $id = $result[id];
  mailistemail_oper($id); //另一个循环
  mysql_select_db("temp",$connection1);
  $query_ins = "insert into maillist(userinfo_id,cardcase_id,sign,sort_id,notes) 
  values ($result[userinfo_id],$result[cardcase_id]+0,'$result[sign]',$result[sort_id]+0,
  '$result[notes]')";
          $ins=mysql_query($query_ins,$connection1) or die("插入temp失败!".mysql_error());
  mysql_select_db("mkit",$connection1);    }
}
function mailistemail_oper($mailid)
{
  global $connection1;
  mysql_select_db("mkit",$connection1);
  $query_sel = "select maillist_email.* from maillist,maillist_email where maillist.id = 
  maillist_email.maillist_id and maillist.id = $mailid";
  $sel_info =mysql_query($query_sel,$connection1) or die("查询mkit库maillist失败!".mysql_error());
  while($result = mysql_fetch_array($sel_info))
    {
       mysql_select_db("temp",$connection1);
  $query_ins = "insert into maillist_email(maillist_id,email) 
  values ($result[maillist_id],'$result[email]')";
  $ins=mysql_query($query_ins,$connection1) or die("插入temp失败!".mysql_error());
  mysql_select_db("mkit",$connection1);
    }
}

4 个解决方案

#1


更好的方法是使用数据库提供的工具完成这样的任务!
可以把数据库复制或备份到相同的服务器上(如果在同一个服务器的话就不用这步了)
然后编写个存储过程什么的就可以完成这样的任务了!

#2


说实话,如果用代码自己循环的话来的很慢,不如写SQL,让数据库服务器执行,这样非常的快

#3


可以试着写不要写入库
直接循环生成sql语句。
然后在mysql里直接执行或者是在phpmyadmin中一次写入。
也可以直接生成一个sql字串一次性写入
mysql_query("insert into table .....;insert into table ....");
在PHP里是支持这样的语句的。你试一下。

#4


引用 2 楼 redcn2004 的回复:
说实话,如果用代码自己循环的话来的很慢,不如写SQL,让数据库服务器执行,这样非常的快


觉得这样比较好...

#1


更好的方法是使用数据库提供的工具完成这样的任务!
可以把数据库复制或备份到相同的服务器上(如果在同一个服务器的话就不用这步了)
然后编写个存储过程什么的就可以完成这样的任务了!

#2


说实话,如果用代码自己循环的话来的很慢,不如写SQL,让数据库服务器执行,这样非常的快

#3


可以试着写不要写入库
直接循环生成sql语句。
然后在mysql里直接执行或者是在phpmyadmin中一次写入。
也可以直接生成一个sql字串一次性写入
mysql_query("insert into table .....;insert into table ....");
在PHP里是支持这样的语句的。你试一下。

#4


引用 2 楼 redcn2004 的回复:
说实话,如果用代码自己循环的话来的很慢,不如写SQL,让数据库服务器执行,这样非常的快


觉得这样比较好...