썩구노트

MySQL : 필드(Field)를 구분자로 묶어 출력하기 (CONCAT) 본문

DB

MySQL : 필드(Field)를 구분자로 묶어 출력하기 (CONCAT)

양석규 2016. 11. 9. 10:50

  CONCAT 


CONCAT은 정해준 구분자를 기준으로 필드를 묶어주는 함수이다. 

사용 방법은 다음과 같다. 


SELECT CONCAT(`필드1`,'구분자',`필드2`,'구분자',`필드3`) FROM 테이블명;


CONCAT에 대해서 알아본 이유는 바로 이것때문이었다. 


데이터 베이스에 다음과 같은 사전이 저장되어 있다. 


keyword 

syn 

 1인용 전기매트

 1인용 전기요

 1인용 전기매트

 1인용 전열장판 

 1인용 전기매트 1인용 전기패트 
 .... ....


keyword는 하나의 제품을 의미하고 syn은 그 제품명에 대한 동의어들이다. 


따라서 내가 원한것은 하나의 키워드 들과 그 동의어들을 나열해서 출력하는 것이었는데 


문제는 각 keyword 들에 대한 동의어의 수가 다르다는 것이었다. 


그러다 발견한 것이 GROUP_CONCAT이다. 



  GROUP_CONCAT 


GROUP_CONCAT은 GROUPING된 레코드들을 원하는 구분자를 이용하여 문자열로 만들 수 있다. 


다음과 같이 사용한다. 


SELECT GROUP_CONCAT( 필드명 SEPARATOR "구분자") FROM 테이블명 

GROUP BY 그룹할 필드명; 


만약 다른 테이블 2개에서 동일한 내용을 갖는 필드가 있다면 그 두 테이블을 이용하겠지만, 나는 하나의 테이블을 


이용해야 했다. 따라서 임시테이블을 생성하여 GROUP_CONCAT을 사용하였다. 


SELECT keyword, GROUP_CONCAT( syn SEPARATOR  '-' ) 

FROM syn_common

GROUP BY keyword


keywordGROUP_CONCAT( syn SEPARATOR '-' )
(주)동양전구동양전구
012베네통012BENETTON
10부십부
12부십이부
1492마일스1492 MILES-1492마일즈-1492 마일즈-1492 마일스
1인용1인-일인용
1인용 전기매트1인용 전열장판-1인용 전기요-1인용 전기장판-1인용 전기패드
1인용소파1인용 sofa-1인 sofa-1인용 쇼파-일인 sofa-일인 소파-1인용 소파-일인용 s...
1일1회1일 1회
1일2회1일 2회
1일3회1일 3회
2g핸드폰2g 핸폰-2g폰-2g 휴대펀-2g 헨드펀-2g 헨드폰-2g 펀-2g 핸펀-2g 헨펀-2g...
2young투영
2단우산2단 우산
2인용이인용-2인
2인용소파이인용 sofa-2인 쇼파-소파 2인-2인 sofa-2인용 쇼파-이인용 쇼파-이인 쇼파-이...
2인용식탁이인 식탁-2인 식탁-이인용 식탁-2인용 식탁
2인용책상이인용 책상-2인용 책상
2중잠금이중잠금
2층침대2층 침대-이층 침대
2피스투피쓰-twopiece-투피스-two-piece
360도회전360도 회전 바퀴-360도 회전-360도 회전식-360˚자동회전-360도 바퀴 자동회전-...
3COM쓰리콤
3M한국쓰리엠-쓰리엠
3QR스리큐알-쓰리큐알-3큐알
3단서랍장3단 서랍장-3단 서랍함
3단우산3단 우산
3단지갑3단 지갑
3단터치3단 터치
3링쓰리링

(phpMyAdmin 출력화면)


여기서, 하나의 keyword에 대해서 검색하고 싶다면 다음과 같이 하면 된다. 


SELECT keyword, GROUP_CONCAT( syn SEPARATOR  '-' ) 

FROM SYN_COMMON

WHERE keyword =  '1인용 전기매트'

GROUP BY keyword


keywordGROUP_CONCAT( syn SEPARATOR '-' )
1인용 전기매트1인용 전열장판-1인용 전기요-1인용 전기장판-1인용 전기패드


만약 GROUP_CONCAT 안에 중복이 존재할 경우, 


keywordGROUP_CONCAT(title SEPARATOR '-' )
14k귀걸이기능-모양-모양-모양-모양-모양-모양-모양-모양-모양-모양-모양-모양-모양-모양-모양-모양...
1인용소파무늬-무늬-무늬-무늬-스타일-스타일-스타일-연령-연령-용도-용도-용도-재질-재질-재질-재질...
1인용전기매트기능-기능-기능-기능-기능-기능-무늬-무늬-원단-원단-원단-원단-원단-원단-종류-종류-종류...
24인치모니터기능-기능-기능-기능-기능-브랜드-브랜드-브랜드-브랜드-브랜드-브랜드-브랜드-브랜드-브랜드...
2g핸드폰기능-기능-제조사-제조사-제조사-제조사-제조사-제조사-제조사-제조사-제조사-제조사-제조사-...
2단서랍장재질-재질-재질-재질-재질-재질-재질-재질-제조사-제조사-제조사-제조사-제조사-제조사-제조...



이렇게 되어 버리는데....


SELECT keyword, GROUP_CONCAT( DISTINCT title SEPARATOR  '-' ) 

FROM table_merge_last

GROUP BY keyword


이렇게 하면 


keywordGROUP_CONCAT(DISTINCT title SEPARATOR '-' )
14k귀걸이기능-모양-브랜드-성별-스타일-연령-주얼리소재-형태
1인용소파무늬-스타일-연령-용도-재질-제조사-종류-형태
1인용전기매트기능-무늬-원단-종류-특징
24인치모니터기능-브랜드-스탠드-입력단자-제조사-특징-패널-화면비율
2g핸드폰기능-제조사-조건-특징-형태
2단서랍장재질-제조사-칸수-특징-폭


오늘도 하나 해결했다잉~