MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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インジェクション対策としてプリペアドステートメントを併用すると、より安全なコードになります。

  1. PythonとMySQLで2つのテーブルをLEFT JOIN(左結合)する方法を徹底解説

    SQLでは、2つのテーブル間の共通の列や、指定した条件に基づいてテーブルを結合(JOIN)することができます。SQLには内部結合(INNER JOIN)、左外部結合(LEFT JOIN)、右外部結合(RIGHT JOIN)など、さまざまな種類のJOINが用意されており、目的に応じて使い分けることが重要です。本記事では、その中でも「LEFT JOIN(左結合)」について詳しく解説します。LEFT JOINとは?LEFT JOINを使用すると、最初に指定したテーブル(左側のテーブル)のすべてのレコードが必ず結果に含まれます。右側のテーブルからは、結合条件に一致するレコードのみが左側のレコードと紐付

  2. PythonでMySQLを使って2つのテーブルを内部結合(INNER JOIN)する方法

    SQLでは、共通のカラムや指定した条件に基づいて、2つのテーブルを結合(JOIN)することができます。テーブルを結合するためのJOINにはいくつかの種類が用意されています。本記事では、その中でも特に使用頻度の高い「内部結合(INNER JOIN)」について詳しく解説します。なお、JOINとINNER JOINはまったく同じ動作をします。INNER JOINは、片方のテーブルの各行をもう片方のテーブルのすべての行と照合し、共通のカラムを持つ行同士、あるいは指定された条件を満たす行同士を組み合わせて1つの結果セットを作成します。2つのテーブルを結合する際は、どの条件で結合するのかを必ず指定する必要