2015-01-21 3 views
0

두 테이블이 있습니다. 하나는 programs이고 다른 하나는 bookprograms입니다. programs 테이블은 프로그램 이름을 가져 오는 곳입니다. 이 테이블의 행을 추가하거나 편집 할 수 있습니다. 동적 행을 열로 바꿈

나는 아래의 쿼리를 사용하지만, 새로운 프로그램이있는 경우는 반영되지 않습니다 : 첫 번째 테이블의

SELECT MAX(IF(programs = 'cla', title, NULL)) cla, 
    MAX(IF(programs = 'csm', title, NULL)) csm 
FROM bookprograms 
GROUP BY title 

구조는.

╦════════════╦═════════════╗ 
║ ID   ║ Programs ║ 
╬════════════╬═════════════╣ 
║ 1   ║  cla  ║ 
║ 2   ║  csm  ║ 
╩════════════╩═════════════╝ 

두 번째 테이블은 책과 이에 해당하는 프로그램을 저장하는 곳입니다.

╦════════════╦═════════════╗ 
║ Title  ║ Programs ║ 
╬════════════╬═════════════╣ 
║ title1  ║  cla  ║ 
║ title2  ║  csm  ║ 
║ title3  ║  cla  ║ 
╩════════════╩═════════════╝ 

어떻게 결과를 얻을 수 있습니까?

╦════════════╦═════════════╗ 
║ cla  ║ csm  ║ 
╬════════════╬═════════════╣ 
║ title1  ║ title  ║ 
║ title3  ║    ║ 
╩════════════╩═════════════╝ 

답변

1

이 쿼리는 꽤 형식으로 당신이 원하는 당신이 있지만 필요한 데이터를 반환 그것을 :

SELECT programs, GROUP_CONCAT(title) AS titles 
FROM bookprograms 
GROUP BY programs 

그것은 반환 : 당신이 이것을 변신 할 수있는 클라이언트 코드에서

programs | titles 
----------+--------------- 
cla  | title1,title3 
cls  | title2 

필요한 구조. 헤더 셀의 값은 programs 필드에 반환됩니다. 필드 title의 값을 쉼표 (,)로 분할하면 나머지 열에 대한 데이터 셀이 있습니다. 결과 세트의 각 행에 대해 반복하여 원하는 테이블의 모든 열을 가져옵니다.

+0

감사! 이것은 정말 큰 도움입니다. –