MySQLで同一サーバーの異なるDB内のテーブルをJOINする
同一の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でランダムに取得
SELECT カラム名 FROM テーブル名 ORDER BY RAND() L ...
-
-
MySQLでパターンマッチの逆
LIKE検索の逆ってなったのでメモ。 NOT LIKE '%あああ%' が正解み ...
-
-
sshでMySQLの操作
今までMySQLを操作するときはphpmyadminから 行っていたけど、php ...
-
-
MySQLでtext型カラムに入っている数値をint型としてソートする
MySQLでtext型として指定されているカラムがあり、その中には文字列であった ...
-
-
MySQLでユニークキーをはる
MySQLでseqとcodeみたいなものをあわせて ユニークキーをはりたかった。 ...
-
-
MySQLで複数のコード及びスコアで検索して、スコアが無いものは0を取得する
やりたかった事は下記の通り。 ・ユニークなコードがあり、そのコードに対して複数の ...
-
-
1回のSQL文で複数のUPDATE
INSERTはバルクインサートを使えばいいが、 UPDATEはあまり聞かないので ...
-
-
mysqldumpが使えないレンタルサーバでMySQLのバックアップ
mysqldumpが使えないレンタルサーバで開発を行うことがあり、尚且つ他社に使 ...
-
-
MySQLのエラーメール送付
MySQLエラーを取得してエラーメール送付。 <? error_repor ...
-
-
MySQLでデータがあれば更新、無ければ挿入
DBにデータがあれば更新、無ければ挿入(新規作成)を 行いたい際に使えるものがあ ...