2012-06-27 106 views
1

我正在为我们的知识库构建一个简单的搜索表(最终使用jQuery数据表)。我能够返回所有我需要的信息,但是当一行与多个产品链接时,我会得到“重复”行。是否有可能从php/mysql查询中返回多个单元格到单个单元格中?

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

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

这三行之间唯一的区别是'Product'列。有没有办法恢复该数据为:

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 

回答

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,Description和Products。然后我拿这三列并调用GROUP_CONCAT函数。该功能将结合共享相同GROUP BY元素的所有产品。

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

+0

完美!你介意解释为什么这样做会做什么? – StephenYo

+0

BTW哪个表格有说明?这样,我可以正确雕刻查询。 – RolandoMySQLDBA

+0

GOT IT-我还添加了一个空间的级联字段之间:SELECT ID,GROUP_CONCAT(””,产品)产品,目录 FROM ( 选择kb.kbarticleid作为ID, kbc.title作为产品, kb.subject为主体, kbd.contentstext作为内容 从swkbarticles KB 内上kb.kbarticleid = kbl.kbarticleid上kb.kbarticleid = kbd.kbarticleid 内部联接swkbarticlelinks KBL加入swkbarticledata KBD 内部联接swkbcategories KBC上kbl.linktypeid = KBC .kbcategoryid )GROUP BY ID,Contents; – StephenYo

相关问题