[英]Export tables from multiple databases and import into a single database
我想从多个数据库中以相同的名称从三个表中导出特定数据,并将它们导入到单个数据库SUPPORT_DATABASE
,这些表是XXX_users
, XXX_usergroups
, XXX-user_usergroup_map
。
用户id
是所有表中的主键。
这是我到目前为止拥有的脚本
MySQL-Export.php
<?php
//ENTER THE RELEVANT INFO BELOW
$mysqlDatabaseName ='db1';
$mysqlUserName ='db1owner';
$mysqlPassword ='Password';
$mysqlHostName ='db1.mywebhost.net';
$mysqlExportPath ='db1backup.sql';
//DONT EDIT BELOW THIS LINE
//Export the database and output the status to the page
$command='mysqldump --opt -h' .$mysqlHostName .' -u' .$mysqlUserName .' -p' .$mysqlPassword .' ' .$mysqlDatabaseName .'
SELECT id, name, username, password, email FROM `xxx_users` WHERE `id` in (SELECT `user_id` FROM `xxx_user_usergroup_map` WHERE `group_id` = (SELECT `id` FROM `xxx_usergroups` WHERE `title` = 'Administrator'));
SELECT id, name, username, password, email FROM `xxx_users` WHERE `id` in (SELECT `user_id` FROM `xxx_user_usergroup_map` WHERE `group_id` = (SELECT `id` FROM `xxx_usergroups` WHERE `title` = 'Engineer'));
> ~/' .$mysqlExportPath;
exec($command,$output=array(),$worked);
switch($worked){
case 0:
echo 'Database <b>' .$mysqlDatabaseName .'</b> successfully exported to <b>~/' .$mysqlExportPath .'</b>';
break;
case 1:
echo 'There was a warning during the export of <b>' .$mysqlDatabaseName .'</b> to <b>~/' .$mysqlExportPath .'</b>';
break;
case 2:
echo 'There was an error during export. Please check your values:<br/><br/><table><tr><td>MySQL Database Name:</td><td><b>' .$mysqlDatabaseName .'</b></td></tr><tr><td>MySQL User Name:</td><td><b>' .$mysqlUserName .'</b></td></tr><tr><td>MySQL Password:</td><td><b>NOTSHOWN </b></td></tr><tr><td>MySQL Host Name:</td><td><b>' .$mysqlHostName .'</b></td></tr></table>';
break;
}
?>
MySQL-Import.php
$mysqlDatabaseName ='db2';
$mysqlUserName ='db2owner';
$mysqlPassword ='Password';
$mysqlHostName ='db2.mywebhost.net';
$mysqlImportFilename ='db1backup.sql';
//DONT EDIT BELOW THIS LINE
//Export the database and output the status to the page
$command='mysql -h' .$mysqlHostName .' -u' .$mysqlUserName .' -p' .$mysqlPassword .' ' .$mysqlDatabaseName .' < ' .$mysqlImportFilename;
exec($command,$output=array(),$worked);
switch($worked){
case 0:
echo 'Import file <b>' .$mysqlImportFilename .'</b> successfully imported to database <b>' .$mysqlDatabaseName .'</b>';
break;
case 1:
echo 'There was an error during import. Please make sure the import file is saved in the same folder as this script and check your values:<br/><br/><table><tr><td>MySQL Database Name:</td><td><b>' .$mysqlDatabaseName .'</b></td></tr><tr><td>MySQL User Name:</td><td><b>' .$mysqlUserName .'</b></td></tr><tr><td>MySQL Password:</td><td><b>NOTSHOWN</b></td></tr><tr><td>MySQL Host Name:</td><td><b>' .$mysqlHostName .'</b></td></tr><tr><td>MySQL Import Filename:</td><td><b>' .$mysqlImportFilename .'</b></td></tr></table>';
break;
}
?>
表结构
XXX_user
user_id, name, username, email, password
300, john smtih, jsmith, jsmith@test.com, password123@
XXX_usergroups
group_id, type
8, administrator
XXX_user_group_map
user_id, group_id
300, 8
我想我能做的是,使用MySQL-Export.php
从三个数据库中导出数据并将数据库存储在服务器上,然后使用MySQL-import.php
所有三个数据库中的数据库导入辅助数据库,数据在这里MODIFY
用户group_id
中XXX-user_usergroup_map
在匹配用户组SUPPORT_DATABASE
在这一点上,我有点卡住了,因为从多个数据库导入用户,该用户可能共享相同的user_id
,所以我不确定该怎么做,在哪里以及如何更改user_id
。
放在user_id
上的SUPPORT_DATABASE
上没有关系
任何人都可以提出一些建议吗?
这是一种逐步进行的方法
SELECT u.name, u.username, u.email, u.password, g2.type FROM "XXX_user" u, "XXX_user_group_map" g, "XXX_usergroups" g2 WHERE g.user_id = u.user_id AND g.group_id = g2.group_id
在此查询中,您将获得用户组类型作为字符串,可在其中用于与您的SUPPORT_DATABASE
组ID匹配
SUPPORT_DATABASE
,将SUPPORT_DATABASE
设置为在user_id上具有AUTO INCREMENT,在电子邮件上具有唯一性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.