我目前正在开发一个前端工具,它要求我编写一个查询,将多行数据返回到单行中。 可能需要注意的是,此SQL查询是根据用户选择动态生成的。 我不是最擅长解释到底什么是需要做的,所以让我给你们展示一下。
表1:
PersonnelID | Product | Intermediate | Advanced
1234 Product1 Module1 Module2
1234 Product2 Module3
1234 Product3 Module4
123456 Product1 Module1 Module2
123456 Product2 Module2
用户可以指定他们想要的任意多个产品或模块,查询需要返回带有特定产品和模块的产品或模块。 我最初的方法是通过SQL来完成这些操作,但是现在我更愿意在返回数据时进行一些客户端操作,如果这对我的服务器来说太困难/负载太大的话。
在实现上述目标多次失败之后,我一直在尝试编写一个查询来返回每个特定personnelID的所有产品条目。 例如,1234将返回一行,其中包含产品1,2和3,以及中间项下的模块1和模块4,高级项下的模块2和3,如下所示:
PersonnelID | Product | Intermediate | Advanced
1234 Product1, Product2, Product3 Module 1, Module 4 Module 2, Module 3
123456 Product1, Product2 Module 1 Module 2, Module 3
我的SQL经验是相当基础的,所以如果这个问题以前被问过,或者是一个相当普通的方法,我很抱歉,我不是很熟练的措辞我的问题或搜索与SQL相当。
我已经尝试过使用GROUP_CONCAT(),但是无法使其按预期工作。 它将返回出现在表中的每个产品的每个实例,并最终花费大约55秒来执行,这简直是不可接受的。
总体而言,我需要显示哪些用户已经选择了特定的产品和/或模块。 如果我的方法似乎倒退/错误,请让我知道,我不只是想要一个我想要的答案:)
你所问问题的答案似乎是:
select PersonnelID,
group_concat(product),
group_concat(intermediate),
group_concat(advanced),
from t
group by PersonnelID;
如果这是一个问题,您应该问另一个关于性能的问题。 请确保包含有关表大小,索引和您正在使用的查询的更多信息。