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

Спасибо! Это действительно большая помощь. –

Смежные вопросы