2016-07-13 3 views
0

내 purchaseproduct 테이블을주고있다MySQL의 그룹 - CONCAT 잘못 출력을

+------------+------------+ 
| productids | quantities | 
+------------+------------+ 
| 1,3,4,5 | 1,1,1,1 | 
| 2,3,4,5 | 1,1,1,1 | 
+------------+------------+ 

내가 아래에 같이 purchaseproduct 테이블

에서 productids에 따라 제품 이름을 얻으려면

productsid | productsname     | 
+------------+-----------------------------+ 
|   1 | Phone      | 
|   2 | Laptop      | 
|   3 | Charger      | 
|   4 | Earphone     | 
|   5 | Camera      | 

내 제품 테이블 필요하다.

Phone,Charger,Earphone,Camera (In row one) 
Laptop,Charger,Earphone,Camera (In row two) 

나는이 아래 문 및 다른 많은

select group_concat(p.productsname) from purchaseproducts as pp join products as p on find_in_set(p.productsid,pp.productids); 

하지만 얻을 출력이

Phone,Charger,Earphone,Camera,Laptop,Charger,Earphone,Camera (All in one row) 

어떻게 내가 원하는 출력을 달성 할 수있다? 시도

+2

당신은 알고있다 왜이 질문을 물어? 왜냐하면 당신은 데이터베이스 디자인을 간과했기 때문입니다. 쉼표로 구분 된 값을 저장하는 것은 너무 나쁩니다! [** 데이터베이스 열에 구분 된 목록을 저장하는 것이 실제로 그렇게 나쁜 것입니까? **] (http://stackoverflow.com/questions/3653462/is-storing-a-delimited-list-in-a-database-column- ** 예 ** – 1000111

+0

@ 1000111- 요구 사항은 다음과 같습니다. :( –

+0

요구 사항을 변경하십시오. – Strawberry

답변

1

당신은 단순히 GROUP_CONCAT 내부 DISTINCT를 사용할 수 있습니다

select pp.productsid , group_concat(DISTINCT p.productsname) 
from purchaseproducts pp 
join products p 
on find_in_set(p.productsid,pp.productids); 
GROUP BY pp.productsid 
+0

별개를 사용하면 작동하지 않습니다. 또한 한 행만 출력하지만 분간하지 마십시오. –

+0

'GROUP 그런데'purchaseproduct' 테이블에'PK '가 없습니까? @RajaDhasan – 1000111

+0

오, 당신은 GROUP BY 절이 없습니다. 지금 시도하십시오. – sagi