//因为每个表的关联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里是支持这样的语句的。你试一下。
直接循环生成sql语句。
然后在mysql里直接执行或者是在phpmyadmin中一次写入。
也可以直接生成一个sql字串一次性写入
mysql_query("insert into table .....;insert into table ....");
在PHP里是支持这样的语句的。你试一下。
#4
觉得这样比较好...
#1
更好的方法是使用数据库提供的工具完成这样的任务!
可以把数据库复制或备份到相同的服务器上(如果在同一个服务器的话就不用这步了)
然后编写个存储过程什么的就可以完成这样的任务了!
可以把数据库复制或备份到相同的服务器上(如果在同一个服务器的话就不用这步了)
然后编写个存储过程什么的就可以完成这样的任务了!
#2
说实话,如果用代码自己循环的话来的很慢,不如写SQL,让数据库服务器执行,这样非常的快
#3
可以试着写不要写入库
直接循环生成sql语句。
然后在mysql里直接执行或者是在phpmyadmin中一次写入。
也可以直接生成一个sql字串一次性写入
mysql_query("insert into table .....;insert into table ....");
在PHP里是支持这样的语句的。你试一下。
直接循环生成sql语句。
然后在mysql里直接执行或者是在phpmyadmin中一次写入。
也可以直接生成一个sql字串一次性写入
mysql_query("insert into table .....;insert into table ....");
在PHP里是支持这样的语句的。你试一下。
#4
觉得这样比较好...