PHP を使用する開発者にとっての一般的なシナリオは、2 つの異なるサーバーのデータベースからデータを共同でクエリする必要があることです。このシナリオは、ビジネス ニーズ、またはデータが異なるサーバーに分散されていることが原因である可能性があります。この記事では、PHP でこのデータ フェデレーション クエリ操作を完了する方法を紹介します。
コードを書き始める前に、クエリするデータを決定する必要があります。 A と B という名前の 2 つのデータベース サービスがあるとします。これら 2 つのデータベースから、顧客 ID、名前、年齢、性別などの顧客情報を共同でクエリする必要があります。データベース A と B には両方とも顧客テーブルがあり、それぞれ customers_a
と customers_b
です。これらのテーブルには、顧客に関する基本情報が含まれています。
私たちのクエリの目標は、customers_a
と customers_b
のすべての顧客の情報を取得することなので、2 つのテーブルに対して JOIN 操作を実行する必要があります。
PHP を使用すると、2 つのデータベースを簡単に接続できます。以下は、データベース A に接続するコード例です:
<?php $host = 'localhost'; $username = 'db_user'; $password = 'db_password'; $dbname = 'database_a'; $db_a = new mysqli($host, $username, $password, $dbname); if ($db_a->connect_error) { die('Connect Error (' . $db_a->connect_errno . ') ' . $db_a->connect_error); }
同様に、データベース B に接続できます:
<?php $host = 'localhost'; $username = 'db_user'; $password = 'db_password'; $dbname = 'database_b'; $db_b = new mysqli($host, $username, $password, $dbname); if ($db_b->connect_error) { die('Connect Error (' . $db_b->connect_errno . ') ' . $db_b->connect_error); }
これで、2 つの異なるデータベースに正常に接続できました。
次に、2 つのデータベースに対して JOIN 操作を実行して、必要なデータを取得する必要があります。コードの読みやすさと保守性を確保するために、クエリ操作を関数にカプセル化します。
<?php function get_customers($db_a, $db_b) { $sql = "SELECT id, name, age, gender FROM customers_a UNION SELECT id, name, age, gender FROM customers_b"; $result = $db_a->query($sql); if (!$result) { die('Query Error: ' . $db_a->error); } $rows = array(); while ($row = $result->fetch_assoc()) { $rows[] = $row; } $result->free(); return $rows; }
この関数では、UNION 演算を使用して、customers_a
と customers_b
のデータをマージします。クエリを実行した後、結果セット内のレコードを配列に入れて、配列を返します。
これで、コードの作成作業はすべて完了しました。コード内で get_customers
関数を呼び出して、2 つのデータベース A と B から共同でクエリされた顧客情報を取得できます。
<?php $rows = get_customers($db_a, $db_b); foreach ($rows as $row) { echo $row['id'] . ' ' . $row['name'] . ' ' . $row['age'] . ' ' . $row['gender'] . '<br>'; }
完全なコード例は次のとおりです:
<?php $host_a = 'localhost'; $username_a = 'db_user'; $password_a = 'db_password'; $dbname_a = 'database_a'; $host_b = 'localhost'; $username_b = 'db_user'; $password_b = 'db_password'; $dbname_b = 'database_b'; $db_a = new mysqli($host_a, $username_a, $password_a, $dbname_a); if ($db_a->connect_error) { die('Connect Error (' . $db_a->connect_errno . ') ' . $db_a->connect_error); } $db_b = new mysqli($host_b, $username_b, $password_b, $dbname_b); if ($db_b->connect_error) { die('Connect Error (' . $db_b->connect_errno . ') ' . $db_b->connect_error); } function get_customers($db_a, $db_b) { $sql = "SELECT id, name, age, gender FROM customers_a UNION SELECT id, name, age, gender FROM customers_b"; $result = $db_a->query($sql); if (!$result) { die('Query Error: ' . $db_a->error); } $rows = array(); while ($row = $result->fetch_assoc()) { $rows[] = $row; } $result->free(); return $rows; } $rows = get_customers($db_a, $db_b); foreach ($rows as $row) { echo $row['id'] . ' ' . $row['name'] . ' ' . $row['age'] . ' ' . $row['gender'] . '<br>'; } $db_a->close(); $db_b->close(); ?>
PHP で 2 つの異なるデータベースを接続し、結合を実行します。クエリ操作は非常に一般的なシナリオです。この記事では、PHP で 2 つの異なるデータベース サービスを接続し、UNION 操作を使用して共同クエリ タスクを完了する方法を紹介します。この記事を通じて、読者が PHP で複数のデータベース サービスを使用する方法をより深く理解できることを願っています。
以上がPHP で 2 つの異なるサーバー データベースのテーブル結合クエリを実行する方法を紹介します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。