썩구노트
MySQL : 필드(Field)를 구분자로 묶어 출력하기 (CONCAT) 본문
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
keyword | GROUP_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
keyword | GROUP_CONCAT( syn SEPARATOR '-' ) |
---|---|
1인용 전기매트 | 1인용 전열장판-1인용 전기요-1인용 전기장판-1인용 전기패드 |
만약 GROUP_CONCAT 안에 중복이 존재할 경우,
keyword | GROUP_CONCAT(title SEPARATOR '-' ) |
---|---|
14k귀걸이 | 기능-모양-모양-모양-모양-모양-모양-모양-모양-모양-모양-모양-모양-모양-모양-모양-모양... |
1인용소파 | 무늬-무늬-무늬-무늬-스타일-스타일-스타일-연령-연령-용도-용도-용도-재질-재질-재질-재질... |
1인용전기매트 | 기능-기능-기능-기능-기능-기능-무늬-무늬-원단-원단-원단-원단-원단-원단-종류-종류-종류... |
24인치모니터 | 기능-기능-기능-기능-기능-브랜드-브랜드-브랜드-브랜드-브랜드-브랜드-브랜드-브랜드-브랜드... |
2g핸드폰 | 기능-기능-제조사-제조사-제조사-제조사-제조사-제조사-제조사-제조사-제조사-제조사-제조사-... |
2단서랍장 | 재질-재질-재질-재질-재질-재질-재질-재질-제조사-제조사-제조사-제조사-제조사-제조사-제조... |
이렇게 되어 버리는데....
SELECT keyword, GROUP_CONCAT( DISTINCT title SEPARATOR '-' )
FROM table_merge_last
GROUP BY keyword
이렇게 하면
keyword | GROUP_CONCAT(DISTINCT title SEPARATOR '-' ) |
---|---|
14k귀걸이 | 기능-모양-브랜드-성별-스타일-연령-주얼리소재-형태 |
1인용소파 | 무늬-스타일-연령-용도-재질-제조사-종류-형태 |
1인용전기매트 | 기능-무늬-원단-종류-특징 |
24인치모니터 | 기능-브랜드-스탠드-입력단자-제조사-특징-패널-화면비율 |
2g핸드폰 | 기능-제조사-조건-특징-형태 |
2단서랍장 | 재질-제조사-칸수-특징-폭 |
오늘도 하나 해결했다잉~
'DB' 카테고리의 다른 글
mysql not in 사용해서 차집합 검색하기 (0) | 2016.12.13 |
---|---|
mysql덤프 (0) | 2016.11.24 |
MySQL : 임시테이블을 이용한 서브쿼리 처리하기 (0) | 2016.11.09 |
MYSQL : MySQL 대소문자 구분 (0) | 2016.11.09 |
MySQL : 해당 필드에 중복된 값 찾기 (0) | 2016.11.09 |