将动态行转置为列

Transpose dynamic rows into columns

我有两个table:一个是programs,另一个是bookprogramsprograms table 是您获取程序名称的地方。可以添加或编辑此 table 中的行。

我使用了下面的查询,但没有反映是否有新程序:

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

结构第table.

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

第二个table是我存放书籍和对应程序的地方。

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

我怎么会得出这个结果?

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

此查询returns您需要的数据,但不是您想要的格式:

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

它returns:

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

在客户端代码中,您可以将其变形为您需要的结构。 header 单元格的值在字段 programs 中返回。用逗号 (,) 拆分字段 title 的值,您将获得该列其余部分的数据单元格。对结果集中的每一行重复以获取所需 table.

的所有列