ホームページ >データベース >mysql チュートリアル >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 サイトの他の関連記事を参照してください。