쿼리문을 작성하다보면 특이한 경우의 수가 많이 생긴다. 보통은 제품명을 하나로 입력하지만 고객사에서 자동으로 입력되길 원해서 필터값을 모두 조합해서 등록해야 하는 경우도 생긴다. 그런데 이때 필터값은 보통 코드 테이블에 공통으로 관리 하는데 그러면 테이블 join 을 해서 subquery 로 가져 와야 하는데 이런 단어들은 어떻게 합쳐야 할찌 난감할때가 있다.
등록이 안된 필터는 null 이나 공백을 내 놓을테니 그 부분도 대응을 해야 한다. 아래 예시는 필터 정보를 | 기호로 하나로 합쳐서 select 해주는 쿼리문이다. CONCAT 는 문자열을 합치는 용도로 쓰는데 의외로 많이 쓰이기 때문에 알아 두는것이 유용하다.
$sql = "SELECT
CONCAT(
COALESCE((SELECT name FROM material_category WHERE id = G.goods_cate), ''), '|',
COALESCE((SELECT name FROM material_category WHERE id = G.filter_1), ''), '|',
COALESCE((SELECT name FROM material_category WHERE id = G.filter_2), ''), '|',
COALESCE((SELECT name FROM material_category WHERE id = G.filter_3), ''), '|',
COALESCE((SELECT name FROM material_category WHERE id = G.filter_4), ''), '|',
COALESCE((SELECT name FROM material_category WHERE id = G.filter_5), ''), '|',
COALESCE((SELECT name FROM material_category WHERE id = G.filter_6), ''), '|',
COALESCE((SELECT name FROM material_category WHERE id = G.filter_7), ''), '|',
COALESCE((SELECT name FROM material_category WHERE id = G.filter_8), ''), '|',
COALESCE((SELECT name FROM material_category WHERE id = G.filter_9), ''), '|',
COALESCE((SELECT name FROM material_category WHERE id = G.filter_10), ''), '|',
COALESCE((SELECT name FROM material_category WHERE id = G.filter_11), ''), '|',
COALESCE((SELECT name FROM material_category WHERE id = G.filter_12), ''), '|',
COALESCE((SELECT name FROM material_category WHERE id = G.filter_13), ''), '|',
COALESCE((SELECT name FROM material_category WHERE id = G.filter_14), ''), '|',
COALESCE((SELECT name FROM material_category WHERE id = G.filter_15), ''), '|',
COALESCE((SELECT name FROM material_category WHERE id = G.filter_16), '')
) AS full_name
FROM goods G
WHERE goods_idx = :goods_idx";
$stmt = $this->pdo->prepare($sql);
$stmt->bindValue(':goods_idx', $goods_idx, \PDO::PARAM_INT);
$stmt->execute();
// fetch()로 결과를 가져오고, full_name만 반환
$result = $stmt->fetch(\PDO::FETCH_ASSOC);
return $result['full_name'] ?? null; // full_name이 없을 경우 null 반환
이렇게 합쳐진 full_name 만 return 해주는 함수 예시로 pdo 로 DB 연동을 하고 있다면 참조 하면 좋을거 같다.
'MYSQL' 카테고리의 다른 글
insert 후 자동 증가 키 값 가져오기 (0) | 2024.11.19 |
---|---|
sql 그룹별 평균 구하기 (0) | 2024.11.18 |
mysql 리액트 만나이 계산 (0) | 2024.11.11 |
쿠폰일자 사용여부 체크 쿼리문 true false 로 받아 오기 (0) | 2024.11.08 |
mysql 날짜 비교 현재 일자 보다 작은 데이터 select query (0) | 2023.12.20 |