상품 목록을 출력하고 있는데요.
상품 테이블과 상품 타입테이블이 분리가 돼있습니다.
상품은 여러개의 상품 타입을 가질 수 있고요.
상품테이블이랑 상품타입테이블을 join 했더니 당연히 상품목록에 같은 상품이 여러개씩 뜨고있습니다;;ㅠㅠ
저는 상품 목록에 상품은 한개씩 뜨고 상품타입만 여러개 띄우고 싶은데
어떻게 해야될지를 모르겠습니다. ㅠㅠ
도와주세요~
제 질문이 잘못됐으면 검색어라도 도와주세요~~ ㅠㅠㅋ
DISTINCT ?
A : B = 1 : N 관계에서, N개가 각 row로 표시되는게 아니라, 컬럼에서 집합으로 보여지기를 원하시는 것 같습니다. 맞나요?
맞습니다!! 아.. 어렵네요.. 그런데 그 N이 말은 N인데 현재 거의 고정으로 3개로 잡혀있구요. 늘어날 확률은 적은편입니다.. 테이블이 나눠져있어서...
변수 써서 CONCAT 하는 것 외에는 별다른 수가 없을 것으로 보입니다. 이러한 내용은 결국 SQL 단에서 해결할 것인가, 어플리케이션 단에서 해결할 것인가로 구분됩니다. 개인적으로는 변수 써가며 예쁜(?) 결과 만드는 것은 SQL 쪽에서 굳이 안해도 되지 않나... 정도의 입장입니다.
간략한 예를 작성해드립니다.
(1) 여러 ROW로 출력
SELECT a.name, b.name FROM item_type a, item b WHERE a.no = b.type;
결과:
+-------+-------------+ | name | name | +-------+-------------+ | bag | cheap bag | | bag | good bag | | shoes | red shoes | | shoes | blue shoes | | shoes | green shoes | +-------+-------------+ 5 rows in set (0.00 sec)
(2) 정리해서 하나의 ROW로 출력
SELECT name, MAX(names) FROM
( SELECT
a.no AS no,
a.name AS name,
@names := IF( @prev = a.no, CONCAT( @names, ', ', b.name ), b.name ) AS names,
@prev := a.no
FROM
item_type a, item b
WHERE
a.no = b.type
ORDER BY
a.no) x
GROUP BY no;
+-------+------------------------------------+ | name | max(names) | +-------+------------------------------------+ | bag | cheap bag, good bag | | shoes | red shoes, blue shoes, green shoes | +-------+------------------------------------+ 2 rows in set (0.01 sec)