4

各ユーザーに対して 1 つのデータベースを持つように、アプリケーションを誤って設計しました。各ユーザーには 3 つの同様のテーブルがありました。私は今、1 つのデータベースと 3 つのテーブルだけを持ちたいと思っています。ここで、古いデータベースのデータベース名を新しいシステムの参照として使用します。古いデータベースには、データベース名を格納する「users」という別のデータベースがありました。新しいデータベースのスキーマ設計が完了し、移行作業が残りました。

ここに画像の説明を入力

ここでの秘訣は、3 つの db 接続があることです。最初に users データベースと userinfo テーブルに接続し、database_name をループで取得し、それを使用して各古いデータベースに接続し、さらに個人、アカウント、およびゲーム テーブルに接続します。

テーブルを取得した後、古いデータベース名を新しいテーブルに追加しながら、新しいデータベース (DATA_ONE) とテーブルを作成/結合したいと考えています。これに関するヘルプ、またはこれを行うためのより良い方法はありますか? どうもありがとう

<?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 に答える