是否可以从php / mysql查询中将多个单元格返回到单个单元格中?

时间:2012-06-27 20:12:11

标签: mysql datatables

我正在为我们的知识库构建一个简单的搜索表(最终使用jquery Datatables)。我能够返回我需要的所有信息,但是当一行链接到我们的多个产品时,我会得到“重复”的行。

例如,解决方案#377适用于我们数据库中的产品1,产品2和产品3。当我运行查询时,我得到以下结果:

ID          Product          Description
377          Product1         Description xyz
377          Product2         Description xyz
377          Product3         Description xyz

三行中唯一的区别是“产品”列。有没有办法将这些数据作为:

返回
ID                Product                   Description
377      Product1, Product2, Product3       Description xyz

我的查询:

select kb.kbarticleid as ID,
kbc.title as Product,
kb.subject as Subject, 
kbd.contentstext as Contents 
from swkbarticles kb 

inner join swkbarticledata kbd on kb.kbarticleid = kbd.kbarticleid
inner join swkbarticlelinks kbl on kb.kbarticleid = kbl.kbarticleid
inner join swkbcategories kbc on kbl.linktypeid = kbc.kbcategoryid

1 个答案:

答案 0 :(得分:2)

我接受了您的查询,将其放入子查询中,将所有产品收集为CSV字符串,然后运行GROUP BY

SELECT ID,GROUP_CONCAT(Product) Product,Description
FROM
(
    select kb.kbarticleid as ID,
    kbc.title as Product,
    kb.subject as Description, 
    kbd.contentstext as Contents 
    from swkbarticles kb 
    inner join swkbarticledata kbd on kb.kbarticleid = kbd.kbarticleid
    inner join swkbarticlelinks kbl on kb.kbarticleid = kbl.kbarticleid
    inner join swkbcategories kbc on kbl.linktypeid = kbc.kbcategoryid
) A GROUP BY ID,Description;

对于我的快速和肮脏的答案,我没有对表现提出任何要求。我不知道主题是描述还是哪个表有描述栏。

假设您的查询有效,我将其设为子查询并返回ID,描述和产品。然后,我将这三列调用GROUP_CONCAT函数。该功能将合并所有共享相同GROUP BY元素的产品。

原则上,这将产生您要求的ID 377的输出。