0

私は2つのデータベースを持っています:

  • 最初のものはMySQLです
  • 2つ目はMSSQLです

MSSQL DBからいくつかの情報を取得する必要がありますが、結果(Select)は、MySQLのパラメーター(date)に応じて制限されます。DBは異なるサーバーに配置されています。

これに対して2つのクエリを実行する必要がありますか、それとも1つだけで実行できますか?

ありがとう!

4

5 に答える 5

2

MySQLサーバーをMSSQLのリンクサーバーオブジェクトとして定義することは可能であり、したがって、クエリでMySQLリンクサーバーを呼び出して、MSSQLサーバーのみをクエリすることができます。ただし、これにより管理オーバーヘッドが追加され、MySQLホストがダウンしている場合、MySQLホストでの適切なエラーチェックが失われる可能性があります。

2つの接続リソースを設定し、それらを個別に照会する方がはるかに理にかなっています。

于 2011-02-17T15:41:12.807 に答える
1

明らかに2つの異なる接続が必要です。したがって、これらの接続のリソースは同じではないため、2つのクエリが必要です(とにかく、抽象化レイヤーを使用して異なるサーバーに接続しない限り、クエリの実行に使用される関数は同じではありません、それでも、2つの接続リソースが必要になります)。

于 2011-02-17T15:38:19.013 に答える
0

いいえ、あなたがすることはできません。単一のクエリについてサーバーのプールに問い合わせる方法はありません。ただし、次のようにクエリをリサイクルできます。

$sql = "SELECT * FROM table";
$result = array();
foreach($serversPool as $server){
  $result []= query($server, $sql);
}
于 2011-02-17T15:41:56.643 に答える
0
$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つの異なる接続とクエリを使用する必要があります。

于 2011-02-17T15:42:03.413 に答える
0

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)

于 2011-02-17T17:40:51.067 に答える