2016-06-18 5 views
0

ich bestimmte Daten aus drei Tabelle mit dem gleichen Namen aus mehreren Datenbanken exportieren möchte und sie in eine einzige Datenbank SUPPORT_DATABASE importieren, die Tische sind XXX_users, XXX_usergroups, XXX-user_usergroup_map.Export Tabellen aus mehreren Datenbanken und Import in eine einzige Datenbank

Der Benutzer id ist der Primärschlüssel in allen Tabellen.

Hier sind die Skripte i

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; 
} 
?> 

Tabellenstrukturen

XXX_user 
user_id, name, username, email, password 
300, john smtih, jsmith, [email protected], [email protected] 

XXX_usergroups 
group_id, type 
8, administrator 

XXX_user_group_map 
user_id, group_id 
300, 8 

bisher haben Was Ich dachte, ich kann, ist es Exportieren Sie die Daten aus drei Datenbanken mit MySQL-Export.php und speichern Sie die Datenbanken auf dem Server, dann importieren Sie die Datenbanken mit MySQL-import.php, aus allen drei Datenbanken in eine Hilfsdatenbank, sobald die Daten hier MODIFY der Benutzer group_id in XXX-user_usergroup_map, um die Benutzergruppen in der SUPPORT_DATABASE übereinstimmen

an diesem Punkt bin ich ein wenig fest, als Benutzer aus mehreren Datenbanken importiert, kann der Benutzer die gleichen user_id teilen, so dass ich nicht sicher bin, was zu tun ist, wo und wie kann ich die user_id ändern.

Es ist egal, was die user_id ist, sobald es jede Stelle bitte etwas, was vorschlagen kann auf SUPPORT_DATABASE

ist.

+0

Sind XXX_usergroups in allen drei Datenbanken identisch? –

+0

nein, die 'group_id' in' XXX_usergroup' wird in allen drei Datenbanken unterschiedlich sein, aber sobald ich die Daten importiere, habe ich ein SQL Skript das sie ändern wird, ich weiß nicht was ich mit der 'user_id' – user2513528

+0

machen soll Dann entfernen Sie einfach die user_id und lassen Sie die SUPPORT_DATABASE automatisch die user_id für Sie inkrementieren. –

Antwort

0

Hier ist eine Möglichkeit, es zu tun, Schritt für Schritt

  1. jede Datenbank-Dump, indem Sie diese Abfrage mit

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

In dieser Abfrage werden Sie Benutzergruppentyp erhalten als Zeichenfolge, die Sie verwenden können, um mit Ihrer SUPPORT_DATABASE Gruppen-ID

  1. Schreiben Sie jetzt ein Skript zum Importieren der SQL in SUPPORT_DATABASE, setzen Sie SUPPORT_DATABASE auf AUTO INCREMENT auf user_id und einmalig auf E-Mail.