2011-07-01 30 views
2

私はサイト検索にsphinxを使用していますが、これはうまくいきますが、今は同じ構造で2つのmysqlデータベースに接続しようとしていて、db2はdb1の継続です。私は簡単にコード内のdb名を切り替えることで結果を得ることができますが、どのようにして一度に両方を選択できますか?ここ 複数のデータベースに接続する

$CONF['sphinx_host'] = 'localhost'; 
$CONF['sphinx_port'] = 9312; 
$CONF['mysql_host'] = "localhost"; 
$CONF['mysql_username'] = "user"; 
$CONF['mysql_password'] = "password"; 
$CONF['mysql_database'] = "db1"; 
$CONF['sphinx_index'] = "index index2"; 


$db = mysql_connect($CONF['mysql_host'],$CONF['mysql_username'],$CONF['mysql_password']) or die("ERROR: unable to connect to database"); 
mysql_select_db($CONF['mysql_database'], $db) or die("ERROR: unable to select database"); 


$sql = str_replace('$ids',implode(',',$ids),$CONF['mysql_query']); 
$result = mysql_query($sql) or die($CONF['debug']?("ERROR: mysql query failed: ".mysql_error()):"ERROR: Please try later"); 

私は$CONF['mysql_database'] = "db1";に単一のMySQL DBを入力するが、私はdb1db2から選択する必要がある場合は、このコードは正常に動作します使用していくつかのコードイムです。誰も私がこれを達成する方法を知っていますか?また、私はそれが非常に便利だとは思わないので、私は質問を投稿しませんでしたそれは単なる単純な選択クエリであり、私はあなたがアイデアを得ると確信しています。

答えて

2

データベースが同じサーバー上でホストされている場合は、mysql_select_db()の呼び出しで任意に1つを選択してから、SQLクエリ内のすべてのテーブル名に接頭辞databasename.を修飾するだけです。 1つのクエリで両方のデータベースのテーブルを混在させることもできます。例えば。あなたは両方のデータベースを必要とするクエリを記述する必要がない場合は

select h.lastname, h.firstname, p.petname 
    from db1.humans as h 
    left outer join db2.pets as p on p.human_id = h.id; 

、あなたは単にあなたがデータベースを切り替える必要があるたびに、再びmysql_select_db()を呼び出すことができます。

データベースが異なるサーバーでホストされている場合は、mysql_connect()に対して2回の呼び出しが必要です。この場合、オプションの$linkパラメータをすべてmysql_の関数に渡すことを忘れないでください。デフォルトの動作では、最新の接続を使用するだけですべての種類のバグが発生する可能性があります。各データベースは別々の接続を持つため、両方のデータベースにアクセスする個々のクエリを実行することはできません。

+0

同じサーバーにあります。私は、あなたがプレフィックスで言ったことを試し、報告して戻します。ありがとう。 – chris

+0

私はそれをかなり今考え出しました。私は確信してすぐにここで良いだろう。ありがとうございました。 – chris

関連する問題