위해

2017-12-22 1 views
1
에서 GROUP_CONCAT이

내 테이블 구조가 모두 범주 번호 ('parent_category', 'par_cat_order')의 insted 상위 범주 내림차순를 표시위해

cat_id cat_desc parent_category par_cat_order cdate    status 
1  Machine          2017-12-22 13:10:51 active 
2  Woods          2017-12-22 13:11:01 active 
3  Tools          2017-12-22 13:11:10 active 
4  Perol   1   1    2017-12-22 13:11:30 active 
5  Diesel   1   1    2017-12-22 13:11:43 active 
6  Table   2   2    2017-12-22 13:11:59 active 
7  Chair   2   2    2017-12-22 13:12:13 active 
8  Round Table  6   2,6    2017-12-22 13:12:32 active 
9  Dining   6   2,6    2017-12-22 13:13:01 active 
10  Cuting Player 3   3    2017-12-22 13:13:15 active 
11  Scrow Driver 3   3    2017-12-22 13:13:40 active 
12  Sandal   9   2,6,9   2017-12-22 13:32:23 active 

내 희망은 어떻게

내 쿼리는

입니다
select a.cat_id, 
a.cat_desc, 
b.cat_desc, 
group_concat(c.cat_desc) 
from category a 
left JOIN category b on (a.parent_category=b.cat_id) 
left JOIN category c on find_in_set(c.cat_id,a.par_cat_order) 
GROUP by a.cat_id 

및 출력

cat_id cat_desc  cat_desc group_concat(c.cat_desc) 
1  Machine  
2  Woods  
3  Tools  
4  Perol   Machine  Machine 
5  Diesel   Machine  Machine 
6  Table   Woods  Woods 
7  Chair   Woods  Woods 
8  Round Table  Table  Table,Woods 
9  Dining   Table  Table,Woods 
10  Cuting Player Tools  Tools 
11  Scrow Driver Tools  Tools 
12  Sandal   Dining  Dining,Table,Woods 
이다,

내 필요 'group_concat (c.cat_desc)'저장된 순서로 필드를 표시합니다. 예 : 8 번째 레코드의 'par_cat_order'에 2,6을 저장했습니다. Woods, Table이 표시됩니다. 당신이 정상화 될 수 있다면 그러나 그것은 당신의 테이블 구조

답변

1

당신은 group_concat

select a.cat_id, 
a.cat_desc, 
b.cat_desc, 
group_concat(c.cat_desc order by c.cat_id asc) 
from category a 
left JOIN category b on (a.parent_category=b.cat_id) 
left JOIN category c on find_in_set(c.cat_id,a.par_cat_order) 
GROUP by a.cat_id 

그것은 더 나은 것에 order by을 사용할 수 있습니다 "표 우즈"를 표시 Database normalization