Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL JOIN을 활용해 두 개의 MySQL 테이블을 조인하는 PHP 스크립트 작성 방법

두 개의 테이블을 조인할 때는 MySQL JOIN 문법을 PHP 함수인 mysql_query() 내부에서 사용할 수 있습니다. 이 함수는 SQL 명령을 실행하는 역할을 하며, 쿼리 실행 후에는 또 다른 PHP 함수인 mysql_fetch_array()를 사용해 조회된 모든 데이터를 가져올 수 있습니다.

쉽게 이해할 수 있도록 다음 예제를 살펴보겠습니다.

예제

이 예제에서는 아래와 같은 데이터를 담고 있는 두 개의 MySQL 테이블을 사용합니다.

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)

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 테이블에서 해당 저자가 작성한 튜토리얼 수를 함께 가져옵니다.

<?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);
?>

쿼리 동작 방식

위 SQL문에서 WHERE 절의 a.tutorial_author = b.tutorial_author 조건이 두 테이블을 연결하는 조인 조건 역할을 합니다. 즉, 저자 이름이 양쪽 테이블에 모두 존재하는 행만 결과로 반환됩니다. 별칭(alias)인 a와 b를 사용하면 긴 테이블 이름을 간결하게 표기할 수 있어 쿼리 가독성이 좋아집니다.

참고: 예제에 사용된 mysql_* 계열 함수(mysql_connect, mysql_query 등)는 PHP 5.5에서 지원이 중단(deprecated)되었으며, PHP 7부터는 완전히 제거되었습니다. 실제 개발 환경에서는 mysqli 확장이나 PDO를 사용하는 것을 권장합니다.