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种语言/栏目?