PHPスクリプト内でMySQL JOINを使って2つのテーブルを結合する方法
PHPスクリプトの中で2つのMySQLテーブルを結合(JOIN)してデータを取得するには、SQLのJOIN構文をそのまま活用します。具体的には、PHP関数 mysql_query() を使ってJOINを含むSQL文を実行し、その後、別のPHP関数 mysql_fetch_array() を使って選択されたデータをすべて取り出します。
ここでは、実際の例を使って手順を詳しく解説します。
使用するサンプルテーブル
この例では、以下のようなデータを持つ2つのMySQLテーブルを用意します。まずは、著者ごとのチュートリアル数を記録した「tcount_tbl」です。
mysql> SELECT * FROM tcount_tbl; +-----------------+----------------+ | tutorial_author | tutorial_count | +-----------------+----------------+ | mahran | 20 | | mahnaz | NULL | | Jen | NULL | | Gill | 20 | | John Poul | 1 | | Sanjay | 1 | +-----------------+----------------+ 6 rows in set (0.01 sec)
次に、チュートリアル本体の情報を格納した「tutorials_tbl」です。
mysql> SELECT * from tutorials_tbl; +-------------+----------------+-----------------+-----------------+ | tutorial_id | tutorial_title | tutorial_author | submission_date | +-------------+----------------+-----------------+-----------------+ | 1 | Learn PHP | John Poul | 2007-05-24 | | 2 | Learn MySQL | Abdul S | 2007-05-24 | | 3 | JAVA Tutorial | Sanjay | 2007-05-06 | +-------------+----------------+-----------------+-----------------+ 3 rows in set (0.00 sec)
テーブルを結合するPHPスクリプト
以下は、「tutorials_tbl」からすべての著者名を選択し、「tcount_tbl」から対応するチュートリアル数を取得するために、2つのテーブルを結合するPHPスクリプトの例です。
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) {
die('Could not connect: ' . mysql_error());
}
$sql = 'SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count
FROM tutorials_tbl a, tcount_tbl b
WHERE a.tutorial_author = b.tutorial_author';
mysql_select_db('TUTORIALS');
$retval = mysql_query( $sql, $conn );
if(! $retval ) {
die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
echo "Author:{$row['tutorial_author']} <br> ".
"Count: {$row['tutorial_count']} <br> ".
"Tutorial ID: {$row['tutorial_id']} <br> ".
"--------------------------------<br>";
}
echo "Fetched data successfully\n";
mysql_close($conn);
?>スクリプトのポイント
- データベース接続: mysql_connect() でサーバーに接続し、失敗した場合は die() でエラーメッセージを表示して処理を終了します。
- JOINクエリ: FROM句で2つのテーブルに別名(a と b)を付け、WHERE句で「a.tutorial_author = b.tutorial_author」という条件を指定することで、著者名をキーとして両テーブルが結合されます。
- データの取得と表示: whileループと mysql_fetch_array() を組み合わせて、結果セットを1行ずつ連想配列(MYSQL_ASSOC)として取り出し、echoで整形して出力します。
- 後処理: 処理完了後は mysql_close() で接続を明示的に閉じます。
注意点:mysql_*系関数は現在非推奨
上記コードで使用している mysql_connect() や mysql_query() などの mysql_* 系関数は、PHP 5.5で非推奨となり、PHP 7以降では削除されています。現在の環境で開発する場合は、mysqli拡張モジュールまたはPDOの使用が推奨されます。たとえば mysqli_query() と mysqli_fetch_array() に置き換えれば、同じロジックをそのまま現行のPHPでも実装できます。また、SQLインジェクション対策としてプリペアドステートメントを併用すると、より安全なコードになります。
-
PythonとMySQLで2つのテーブルをLEFT JOIN(左結合)する方法を徹底解説
SQLでは、2つのテーブル間の共通の列や、指定した条件に基づいてテーブルを結合(JOIN)することができます。SQLには内部結合(INNER JOIN)、左外部結合(LEFT JOIN)、右外部結合(RIGHT JOIN)など、さまざまな種類のJOINが用意されており、目的に応じて使い分けることが重要です。本記事では、その中でも「LEFT JOIN(左結合)」について詳しく解説します。LEFT JOINとは?LEFT JOINを使用すると、最初に指定したテーブル(左側のテーブル)のすべてのレコードが必ず結果に含まれます。右側のテーブルからは、結合条件に一致するレコードのみが左側のレコードと紐付
-
PythonでMySQLを使って2つのテーブルを内部結合(INNER JOIN)する方法
SQLでは、共通のカラムや指定した条件に基づいて、2つのテーブルを結合(JOIN)することができます。テーブルを結合するためのJOINにはいくつかの種類が用意されています。本記事では、その中でも特に使用頻度の高い「内部結合(INNER JOIN)」について詳しく解説します。なお、JOINとINNER JOINはまったく同じ動作をします。INNER JOINは、片方のテーブルの各行をもう片方のテーブルのすべての行と照合し、共通のカラムを持つ行同士、あるいは指定された条件を満たす行同士を組み合わせて1つの結果セットを作成します。2つのテーブルを結合する際は、どの条件で結合するのかを必ず指定する必要