こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

同じサーバーで、異なるデータベースを同時に開くことはできますか?

1.タイトルの通り、同時に開くことができますでしょうか?
日本PHPユーザー会ホームページでは以下の方法でできるとの回答があります。

$con1 = mysql_connect(localhost, user_id , pass);
$con2 = mysql_connect(localhost, user_id , pass);

mysql_select_db("db1",$con1);
mysql_select_db("db2",$con2);
========================================
db1
user_table
user_id(int),user_name(var)
==========================================
db2
main_table
main_id(int),user_id(int)
========================================
$sql_user_name = "SELECT user_name FROM user";
$result_user = mysql_query($sql_user_name,$con1);
$row_user = mysql_fetch_array($result_user);
echo $row_user[user_name];
のようにやっても
mysql_fetch_array()がでます。
mysql_queryは最後の接続を活かすとなっているのでこの部分の書き方を教えてください。

2.できたとしてリレーションを行うことができますでしょうか?
つまり
$sql_user_name = "SELECT user_name FROM db1.user_table,db2.main_table WHERE db1.user_table.user_id = db2.main_table.user_id"
というようなことはできますでしょうか?

長文で申し訳ありませんが、どうかよろしくお願いします。

投稿日時 - 2005-12-06 12:07:12

QNo.1822667

困ってます

質問者が選んだベストアンサー

同じMysqlでやるのでしたら、
まず接続IDが二つのDBの接続権限(と言うかselect権限)がついているかを確認してください。

で、あとは質問文の通り、
$sql_user_name = "SELECT user_name FROM db1.user_table,db2.main_table WHERE db1.user_table.user_id = db2.main_table.user_id"
と言うようにやればいいと思います。

できない場合はどんなエラーが出るのか?
どのようにやったのか?
を書いていただければ解決の手がかりになります。

投稿日時 - 2005-12-08 16:07:45

お礼

$x = mysql_connect(localhost,user,pass);
mysql_select_db('db1',$x);
mysql_select_db('db2',$x);

$sql = "SELECT * FROM db1.table1,db2.table2 WHERE table1.id = table2.id";

というやり方でできることがわかりました。ありがとうございました。

投稿日時 - 2005-12-22 13:35:25

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

>2.できたとしてリレーションを行うことができますでしょうか?

この答えは、同一サーバ上に、
・複数のデータベースサーバを動作させているのか
・単一データベースサーバ上で複数データベースなのか
で、答えが変わってきます。

スクリプトから想像するに、1つのマシンに1つのデータベースサーバを動作させ、
2つのデータベースがあるだけのように思いますので、書かれているような
リレーション(というか結合処理)は可能です。

投稿日時 - 2005-12-06 14:55:22

補足

これは1つのサーバーマシン上に、複数のデータベースがあります。(MySQLは1つです)

書かれているようなリレーション(というか結合処理)は可能です。
どのように書いたらよろしいのでしょうか?

投稿日時 - 2005-12-07 09:02:05

ANo.1

1.
echo $row_user["user_name"];
とか
echo $row_user[0]["user_name"];
とかでも出ませんか?

2.
異なるDB間でリレーションさせることはできないと思います。
コネクションはDBに対して張られるので、2つのDBのコネクションを合体してクエリーを投げることは通常できません。
そういうAPIを誰かが作っていれば別ですが。

投稿日時 - 2005-12-06 13:31:53

補足

返答ありがとうございます。

echo $row_user["user_name"];
とか
echo $row_user[0]["user_name"];
のいずれも出来ませんでした。

2.Accessとかでは、リンクファイルというような形式をとってクエリーが組めるのでできるのかと安易に思っていましたが・・・

投稿日時 - 2005-12-07 08:59:14

あなたにオススメの質問