ホームページ >バックエンド開発 >PHPの問題 >PHP で 2 つの異なるサーバー データベースのテーブル結合クエリを実行する方法を紹介します。

PHP で 2 つの異なるサーバー データベースのテーブル結合クエリを実行する方法を紹介します。

PHPz
PHPzオリジナル
2023-04-06 09:14:411285ブラウズ

PHP を使用する開発者にとっての一般的なシナリオは、2 つの異なるサーバーのデータベースからデータを共同でクエリする必要があることです。このシナリオは、ビジネス ニーズ、またはデータが異なるサーバーに分散されていることが原因である可能性があります。この記事では、PHP でこのデータ フェデレーション クエリ操作を完了する方法を紹介します。

1. クエリに必要なデータを決定する

コードを書き始める前に、クエリするデータを決定する必要があります。 A と B という名前の 2 つのデータベース サービスがあるとします。これら 2 つのデータベースから、顧客 ID、名前、年齢、性別などの顧客情報を共同でクエリする必要があります。データベース A と B には両方とも顧客テーブルがあり、それぞれ customers_acustomers_b です。これらのテーブルには、顧客に関する基本情報が含まれています。

私たちのクエリの目標は、customers_acustomers_b のすべての顧客の情報を取得することなので、2 つのテーブルに対して JOIN 操作を実行する必要があります。

2. 2 つのデータベースの接続

PHP を使用すると、2 つのデータベースを簡単に接続できます。以下は、データベース A に接続するコード例です:

<?php
$host = &#39;localhost&#39;;
$username = &#39;db_user&#39;;
$password = &#39;db_password&#39;;
$dbname = &#39;database_a&#39;;

$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 = &#39;localhost&#39;;
$username = &#39;db_user&#39;;
$password = &#39;db_password&#39;;
$dbname = &#39;database_b&#39;;

$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 つの異なるデータベースに正常に接続できました。

3. 結合クエリ操作を実行する

次に、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_acustomers_b のデータをマージします。クエリを実行した後、結果セット内のレコードを配列に入れて、配列を返します。

4. クエリ関数を呼び出す

これで、コードの作成作業はすべて完了しました。コード内で get_customers 関数を呼び出して、2 つのデータベース A と B から共同でクエリされた顧客情報を取得できます。

<?php
$rows = get_customers($db_a, $db_b);
foreach ($rows as $row) {
    echo $row[&#39;id&#39;] . &#39; &#39; . $row[&#39;name&#39;] . &#39; &#39; . $row[&#39;age&#39;] . &#39; &#39; . $row[&#39;gender&#39;] . &#39;<br>';
}

5. 完全なコード例

完全なコード例は次のとおりです:

<?php
$host_a = &#39;localhost&#39;;
$username_a = &#39;db_user&#39;;
$password_a = &#39;db_password&#39;;
$dbname_a = &#39;database_a&#39;;

$host_b = &#39;localhost&#39;;
$username_b = &#39;db_user&#39;;
$password_b = &#39;db_password&#39;;
$dbname_b = &#39;database_b&#39;;

$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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。