2011-12-15 8 views
0

私は複数のMySQLテーブルを使用し、それらの間でmysql_select_db関数でスイッチするWebサイトをPHPで持っています。PHP + MySQLマルチDBウェブサイトをプレフィックス付きのシングルDBウェブサイトにする。

DB1 (table1, table2, table3) 
    DB2 (table1, table2) 

最後のホスティングでは、1つのデータベースのみがサポートされています。だから私は、mysql_select_db関数をカスタムmysql_switch_prefix関数に置き換えるシステムを考えました。この関数は、次のクエリのすべてのテーブル名のプレフィックスとして使用される文字列を格納します。

DB (DB1_table1, DB1_table2, DB1_table3, DB2_table1, DB2_table2) 

次は私が「db_prefix」変数で始まるテーブル名を持つすべてのテーブル名を置き換えるカスタムするmysql_query関数を使用します。

SELECT * FROM `table1` -> SELECT * FROM `DB1_table1` 

変数で始まるテーブル名でSQL文ですべてのテーブル名を交換する方法(または正規表現)がありますか?

+0

ここで、単に 'database'sだけでなく、' schema'sを持っていれば、それぞれを別々の 'schema'でダンプすることをお勧めします。それらが接頭辞付きである(テーブル名の衝突がありますか)という理由がありますか?テーブルの名前を変更する必要がありますか?それ以外の場合は、名前を同じにしておき、面倒を取らないようにしましょう。 –

+0

問題は、 'from'の後だけでなく、かなりの数の場所とSQLクエリでテーブル名を持つことができるということです。正規表現を構築することは可能かもしれませんが、おそらくケースを超えてしまうでしょう。 – fge

答えて

1

テーブル名をクエリしてPHP配列に入れることができます。

$result = mysql_query("SHOW TABLES FROM [DB name]") 
while($tableNames = mysql_fetch_row($result)){...} 

は、ループを作成し、このような何かを:

mysql_query("RENAME TABLE" . $tableNames[$i] . "TO [prefix]" . tableNames[$i]); 

ここで "RENAME ..." クエリのために、MySQLのdocumentationです。

関連する問題