PHP에서 관련 테이블 데이터 가져오기
사용자와 그들의 도시를 함께 가져오는 쿼리를 만들어 봅시다. 이를 위해서는
LEFT
JOIN 명령어가 필요합니다:
이 명령어의 구문은 다음과 같습니다:
SELECT 필드 FROM 테이블_이름
LEFT JOIN 관련_테이블_이름 ON 연결_조건
WHERE 선택_조건
이 명령어 구문의 개별 부분들을 살펴봅시다.
필드
여러 테이블에서 선택을 하기 때문에,
*를 통한 모든 필드 선택은
작동하지 않습니다. 다음 쿼리는 메인 테이블의 필드만 선택하고,
관련 테이블의 필드는 선택하지 않습니다:
SELECT *
모든 테이블에서 데이터를 선택하려면,
* 앞에 선택할 테이블 이름을
지정해야 합니다:
SELECT users.*, cities.*
또는 테이블 이름을 앞에 지정하여 필요한 필드를 나열할 수 있습니다:
SELECT users.name, cities.name
이 두 가지 방법에는 문제가 있습니다. 사실은, 테이블의 필드 이름이 같다면 PHP 배열에서 이름 충돌이 발생하고 하나의 필드만 남게 되어 두 번째 필드는 사라집니다.
이 문제를 해결하려면 충돌하는 이름을
as 명령어를 통해 변경해야 합니다:
SELECT users.name, cities.name as city_name
연결
ON 명령어 뒤에는 두 테이블 간의 연결이 이루어지는
필드를 지정해야 합니다. 우리의 경우 이는 도시 테이블의
id 필드와 사용자 테이블의 city_id 필드입니다:
ON cities.id=users.city_id
쿼리
결과적으로, 사용자와 그들의 도시를 함께 가져오는 쿼리는 다음과 같이 보일 것입니다:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
실습 문제
상품 테이블과 그 카테고리 테이블이 있다고 가정합니다. 상품 이름과 그 카테고리를 함께 가져오는 쿼리를 작성하세요.