私は2つのデータベースを持っています:
- 最初のものはMySQLです
- 2つ目はMSSQLです
MSSQL DBからいくつかの情報を取得する必要がありますが、結果(Select)は、MySQLのパラメーター(date)に応じて制限されます。DBは異なるサーバーに配置されています。
これに対して2つのクエリを実行する必要がありますか、それとも1つだけで実行できますか?
ありがとう!
私は2つのデータベースを持っています:
MSSQL DBからいくつかの情報を取得する必要がありますが、結果(Select)は、MySQLのパラメーター(date)に応じて制限されます。DBは異なるサーバーに配置されています。
これに対して2つのクエリを実行する必要がありますか、それとも1つだけで実行できますか?
ありがとう!
MySQLサーバーをMSSQLのリンクサーバーオブジェクトとして定義することは可能であり、したがって、クエリでMySQLリンクサーバーを呼び出して、MSSQLサーバーのみをクエリすることができます。ただし、これにより管理オーバーヘッドが追加され、MySQLホストがダウンしている場合、MySQLホストでの適切なエラーチェックが失われる可能性があります。
2つの接続リソースを設定し、それらを個別に照会する方がはるかに理にかなっています。
明らかに2つの異なる接続が必要です。したがって、これらの接続のリソースは同じではないため、2つのクエリが必要です(とにかく、抽象化レイヤーを使用して異なるサーバーに接続しない限り、クエリの実行に使用される関数は同じではありません、それでも、2つの接続リソースが必要になります)。
いいえ、あなたがすることはできません。単一のクエリについてサーバーのプールに問い合わせる方法はありません。ただし、次のようにクエリをリサイクルできます。
$sql = "SELECT * FROM table";
$result = array();
foreach($serversPool as $server){
$result []= query($server, $sql);
}
$con = mysql_connect(SQL_HOST,SQL_USER,SQL_PASS);
$con1 = mssql_connect(SQL_HOST1,SQL_USER1,SQL_PASS1);
mysql_query($mysql_query);
mssql_query($mssql_query);
これは機能するはずですが、2つの異なる接続とクエリを使用する必要があります。
Afaik、あなたができないある種の抽象化を使用しない限り、基礎となるプロトコルは異なります。私はミシェルに同意します。これが私がそれを実装した方法です。
//php5-sybase : Module for Sybase and MSSQL
//freetds-dev : Implements Tabular DataStream protocol for linux which is used by Sybase and MSSQL
putenv('FREETDSCONF=/etc/freetds/freetds.conf');
function dbOpenConnection(){
//create mssql connection
$db = mssql_connect('host','user','pass');
$msdb = mssql_select_db('db_name',$db);
//create mysql connection
$conn = mysql_connect('db_server','user','pass');
mysql_select_db('db_name',$conn);
return array($db, $msdb, $conn);
}
そしてあなたのfreetdsconf:
# A typical Microsoft server
[BData]
host = xxx.xxx.xxx.xxx
port = 1433
tds version = 8.0
1つのクエリでそれを実行できる方法はありません。あなたは2つでそれをしなければなりません。
1つのステートメントでそれが必要な場合は、ネストされたクエリを記述します。これは次のようなものです
SELECT * FROM ms_sql_table WHERE some_var = (result_from_nested_mysql_subquery)