두 개의 테이블을 조인할 때는 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를 사용하는 것을 권장합니다.