勉強したことのメモ

webプログラマが勉強したことのメモ。

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

  関連記事

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にデータがあれば更新、無ければ挿入(新規作成)を 行いたい際に使えるものがあ ...