Php MySQL,将特定行列合并到另一行

Php MySQL,将特定行列合并到另一行,php,mysql,sql,Php,Mysql,Sql,你能帮我找到解决办法吗 我对这个问题有个疑问 SELECT P.id, P.url, PT.name, PT.lang FROM cms_pages P INNER JOIN cms_pages_translations PT ON PT.page_id = P.id ORDER BY P.id DESC LIMIT 10; 返回的结果如下: ID | URL | NAME | LANGUAGE --------

你能帮我找到解决办法吗

我对这个问题有个疑问

 SELECT P.id, P.url, PT.name, PT.lang
 FROM cms_pages P
 INNER JOIN cms_pages_translations PT
   ON PT.page_id = P.id
 ORDER BY P.id DESC LIMIT 10;
返回的结果如下:

 ID |     URL        |       NAME       | LANGUAGE          
---------------------------------------------------
 1  |  'hello-word'  | 'Hello world'    | 1
---------------------------------------------------
 1  |  'hello-word'  | 'Hola mundo'     | 2
---------------------------------------------------
 1  |  'hello-word'  | 'Olá mundo'      | 3
---------------------------------------------------
 2  |  'now-online'  | 'We're online'   | 1
---------------------------------------------------
 2  |  'now-online'  | 'Estamos online' | 2
---------------------------------------------------
 2  |  'now-online'  | 'Estamos online' | 3
我如何才能实现这样的目标:

 ID |     URL        |       NAME_1      |       NAME_2      |   NAME_3
-----------------------------------------------------------------------------
 1  |  'hello-word'  |  'Hello world'    |   'Hola mundo'    | 'Olá mundo'
-----------------------------------------------------------------------------
 2  |  'now-online'  | 'We're online'    | 'Estamos online'  | 'Estamos online'
-----------------------------------------------------------------------------

如果您知道潜在语言的数量——这将导致您知道额外列的数量——您可以使用条件聚合。下面是一个基于示例数据的示例:

select id, url, 
    max(case when language = 1 then name end) name_1,
    max(case when language = 2 then name end) name_2,
    max(case when language = 3 then name end) name_3
from <yourquery>
group by id, url

如果您不知道语言的数量,则必须使用动态sql动态构建列。

这称为数据透视。如果知道潜在列的最大数量,则可以使用条件聚合。否则,您将不得不使用动态sql。这两种语言都有很多例子。@sgedes我已经搜索过了,但对我帮助不大,你能给我推荐一篇关于这些概念的好文章吗?你知道语言的最大数量吗?是否不超过3种语言/栏目?