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のRANK及びDENSE_RANK関数を用いてランキングを実装する方法
ランキング機能を実装する際、上位〇位までのデータをMySQLから持ってきて順位付 ...
-
-
MySQLで「Incorrect integer value: '' for column」エラーの対応方法
MySQLで「Incorrect integer value: '' for c ...
-
-
MySQLのトリガーを使用して特定のテーブルの操作を行った際に別テーブルにログを残す方法
MySQLにトリガーという機能があるらしくどのようなものか調べたところ、事前に「 ...
-
-
MySQLでdatetime型データの〇日後を取得する方法(DATEDIFF)
MySQLでdatetime型データがあり、何日経過しているかを取得し、〇日経過 ...
-
-
MySQLで一連の処理を関数のように実行できるストアドプロシージャの設定と利用方法
MySQL関連のサイトを見ていた際にストアドプロシージャが云々というページがあっ ...