2014-11-21 176 views
0

我有以下MySQL查询获取我需要的所有信息。格式化查询显示结果

结果是enter image description here

重要的列这里需要注意的是biobankDbId, attributeListName, attributeListValue。每个生物样本库可以有不同的attributeListName,并且每个attributeListName有不同的attributeListValue这三者的组合在结果集中是唯一的。例如在rows 2 and 3; 可用文件对于血清生物库协议/程序样品目录

只要我得到的结果是这样的:

Biobank results = BiobankLocalServiceUtil.searchBiobanks(); 
for(Biobank row:results){ 
// To be done.... 

} 

我要显示的结果像这样由attributeListName分组每个生物样本库。

Name: Biobank For Serum 

Automation Services: 
Analysis 

Available Documents: 
Protocols/Procedures, Sample Catalogue 

Complementary Services: 
Biochemistry Laboratory, Pathology Department/Imaging 

..... 

我也许可以得到这个通过获取的结果,因为它是和再制造另一个查询完成。但是做多个查询将会是低效的。更进一步,因为我有这个查询所需的所有东西,我正在通过修改查询或者在前端寻找解决方案,例如PHP/JSP来根据需要显示查询结果的格式。

P.S.小图片的道歉。如果在新选项卡中打开,它会更大。

+0

我完全不明白你想要什么:你的查询很奇怪:“LIKE'%%'或''是NULL'''永远不会为空!该语言是PHP还是Java?根据语言的不同,答案会完全不同。也许你可以给对象Biobank ... – rlm 2014-11-21 13:44:11

+0

什么是* OR''=''*应该这样做?建议bin并重新开始! – Strawberry 2014-11-21 13:45:51

+0

请假定查询是正确的。我正在使用Liferay Java EE门户框架,查询显示略有不同。我使用mysql查询日志在sql workbench中运行查询。因为这是没有参数的空查询,它将图像中的结果集提取给我。 – SASM 2014-11-21 13:49:45

回答

1

您的查询,由您使用的Liferay事件生成,令人分心,令人分心。但它似乎是正确的。希望所有那些奇怪的OR '' IS NULL子句不会破坏性能。

您似乎正在处理biobankattributelists表中的名称/值架构。

这里的问题是格式化您的结果集以供显示。正如你所指出的,你需要的所有信息都在结果集中。你需要做什么,用你的主机语言(Java?php?我们不能从你的问题中知道)读取结果集并构建你的输出结果。

如果您可以修改查询,我建议您在此末尾添加此ORDER BY子句。

ORDER BY organization_.name, 
     biobankattributelists.attributeListName, 
     biobankattributelists.attributeListValue 

您希望这样,结果集的行将以您需要它们构建输出的顺序出现。

然后你想在你的主机程序中实现什么报告写人叫控制中断逻辑。也就是说,每当列的值从之前的值改变时,你就想做一些特殊的事情。例如,每当组织名称更改时,您想显示新的组织名称。

尊重,这是超出了教你做到这一点的答案的范围。