MySQLで同一サーバーの異なるDB内のテーブルをJOINする
2024/01/07
同一のMySQLサーバーでdb1データベースのtable1テーブルと、db2データベースのtable2テーブルを結合したかった。共有のカラムはidとする。以下に対応方法をメモ。
ソースコード
$mysqli = new mysqli($dbhost, $dbuser, $dbpass, 'db1'); $mysqli->set_charset('utf8'); $query = ' SELECT * FROM db1.table1 AS a LEFT JOIN db2.table2 AS b ON a.id = b.id ';
あとこれテストしてて気付いたんだけど、最初に接続するDBに関してはどこでもいいみたい。SELECT権限さえあれば、
$mysqli = new mysqli($dbhost, $dbuser, $dbpass, 'db3'); //実際に使うのはdb1とdb2だけど、db3を接続してもok $mysqli->set_charset('utf8'); $query = ' SELECT * FROM db1.table1 AS a LEFT JOIN db2.table2 AS b ON a.id = b.id ';
という形でもいける。
また、同一ファイル内で異なるDBに接続したい場合は、いちいちcloseしてたけど「db名.table名」で書けばその必要は無かった。以下のような形。
$mysqli = new mysqli($dbhost, $dbuser, $dbpass, 'db3'); $mysqli->set_charset('utf8'); $query = ' SELECT * FROM db1.table1 '; $row = $mysqli->query($query); while ($rs = $row->fetch_array(MYSQLI_ASSOC)) { var_dump($rs); } $query = ' SELECT * FROM db2.table2 '; $row = $mysqli->query($query); while ($rs = $row->fetch_array(MYSQLI_ASSOC)) { var_dump($rs); }
関連記事
-
-
MySQLのバックアップファイルを簡単に作成できるライブラリ「myphp-backup」の利用方法
MySQLのバックアップを取る際にadminerとかから手動で対応するのではなく ...
-
-
MySQLのintのカラムで2147483647の値
MySQLでintのカラムに数値を入れると「2147483647」という値になっ ...
-
-
MySQLにてdatetime型のカラムを整形し「年月日のみ形式」または「秒のみ省いた形式」で表示する方法
MySQLにてdatetime型のカラムに登録日時等を格納しており、管理画面側で ...
-
-
MySQLに保存したデータをJSON形式で取得する方法
MySQLに保存したデータをJSON形式で利用したいということがたまにある(Ja ...
-
-
MySQLでwhere句を使ってカラム指定でデータをコピーする方法
MySQLで大量のデータを保存しているテーブルがあり、そのデータを絞った上で尚且 ...