ホームページ >データベース >mysql チュートリアル >PHP でクロスデータベース クエリを実行するにはどうすればよいですか?

PHP でクロスデータベース クエリを実行するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-10 12:42:02324ブラウズ

How to Perform Cross-Database Queries in PHP?

PHP のクロスデータベース クエリ: 総合ガイド

この記事では、PHP でクロスデータベース クエリを構築する際の問題について説明します。これは、以前に MySQL のコンテキストで検討されました。 MySQL でクロスデータベース クエリを成功裏に達成したにもかかわらず、作成者は PHP でプロセスを複製しようとしたときに失敗に遭遇しました。

具体的には、作成者は一度に 1 つのデータベースのみを使用する際に mysql_select_db によって課される制限に疑問を抱いています。クロスデータベースクエリは非現実的です。さらに、クエリごとにデータベースを指定するという代替案は面倒だと考えられています。

PHP のクロスデータベース クエリ

mysql_select_db の制限を克服し、著者は解決策を受け取りました。これにより、データベース間の直接結合が可能になります:

$db = mysql_connect($host, $user, $password);
mysql_select_db('my_most_used_db', $db);

$q = mysql_query("
    SELECT *
    FROM   table_on_default_db a, `another_db`.`table_on_another_db` b
    WHERE  a.id = b.fk_id
");

この例では、 mysql_select_db で指定されたデータベースがスクリプトのデフォルトのデータベースになります。ただし、another_db.table_on_another_db.

異なるホストに対する代替アプローチ

で見られるように、クエリでは、適切なデータベース名を使用して手動で異なるデータベースのテーブルを参照することにより、異なるデータベースのテーブルを指定できます。データベースが異なるホストに存在する場合、直接結合は不可能になります。代わりに、2 つのクエリを使用するアプローチをお勧めします。

$db1 = mysql_connect($host1, $user1, $password1);
$db2 = mysql_connect($host2, $user2, $password2);

$q1 = mysql_query("
    SELECT id
    FROM   table
    WHERE  [..your criteria for db1 here..]
", $db1);

$tmp = array();
while($val = mysql_fetch_array($q1))
    $tmp[] = $val['id'];

$q2 = mysql_query("
    SELECT *
    FROM   table2
    WHERE  fk_id in (".implode(', ', $tmp).")
", $db2);

この方法では、2 つの別々のクエリ (各データベースに対して 1 つずつ) を作成します。最初のクエリは、最初のデータベース内の基準を満たすレコードの ID を取得します。これらの ID は 2 番目のクエリのフィルターとして使用され、2 番目のデータベースから対応するレコードを取得します。

以上がPHP でクロスデータベース クエリを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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