4

我错误地将我的应用程序设计为每个用户都有一个数据库。每个用户有 3 个类似的表。我现在只想拥有一个数据库和 3 个表;我将使用旧数据库中的数据库名称作为新系统中的参考。在存储数据库名称的旧数据库中还有另一个名为“用户”的数据库。我完成了新数据库的架构设计,现在进行迁移。

在此处输入图像描述

这里的诀窍是我有 3 个数据库连接。我首先连接到 users 数据库和 userinfo 表,在循环中获取 database_name,用它来连接每个旧数据库,并进一步连接到个人、帐户和游戏表。

拿起表格后,我想用新的数据库(DATA_ONE)和表格填充/加入它,同时我将旧的 database_name 附加到新的表格中。对此有任何帮助或有更好的方法吗?非常感谢

<?php

$dbhost = "localhost";  
$dbname = "users"; 
$dbuser = "root"; 
$dbpass = "*****"; 

    $conn1 = mysql_connect($dbhost, $dbuser, $dbpass, TRUE) or die("MySQL Error: " .  mysql_error()); 
    $conn2 = mysql_connect($dbhost, $dbuser, $dbpass, TRUE) or die("MySQL Error: " . mysql_error()); 
    $conn3 = mysql_connect($dbhost, $dbuser, $dbpass, TRUE) or die("MySQL Error: " . mysql_error());

    mysql_select_db($dbname,$conn1) or die("MySQL Error: " . mysql_error()); 

$query  = "SELECT database_name FROM userinfo";
$result1 = mysql_query($query,$conn1);
 while($row = mysql_fetch_array($result1, MYSQL_ASSOC))
    {
 $database_name =$row['database_name'];
 $conn2 = mysql_connect($dbhost, $dbuser, $dbpass) or die("MySQL Error: " . mysql_error());
 $db = mysql_select_db($database_name ,$conn2) ;
 // now, pick personal, accounts, games tables of user and populate new database and  tables.
// this is where i need help.   
  }

 ?>
4

1 回答 1

1

为什么您认为需要 3 个具有相同凭据的单独数据库连接?在任何 mysql 查询中,您可以通过在表名前加上数据库名(以及中间的 . )来引用同一实例上的任何数据库中的表。我建议不要使用 'database_name' 作为属性名称:

$databases=get_mysql('SELECT DISTINCT database FROM users.userinfo ORDER BY database');
$count_of_users=count($databases);
foreach ($databases as $user_offset=>$user) {
   $uqry="INSERT INTO data_one.personal
     (user, id, address, password)
     SELECT '$user'
     , (id*$count_of_users*$user_offset)
     , address
     , password
     FROM ${user}.personal"; 
    ...

(假设 'id' 是一个自动增量值,可以在别处引用)。

于 2012-05-02T12:19:28.593 回答