格式化查询提取的结果以进行显示

时间:2014-11-21 13:35:50

标签: java php html mysql jsp

我有以下MySQL查询,它可以获取我需要的所有信息。

SELECT biobank.*, organization_.name, biobankattributelists.*
FROM biobank INNER JOIN organization_ ON biobank.biobankDbId = organization_.organizationId 
LEFT JOIN biobankattributelists ON biobank.biobankDbId=biobankattributelists.biobankDbId 
WHERE ((organization_.name LIKE '%%' OR '' IS NULL) 
OR (biobank.biobankId LIKE '%%' OR '' IS NULL) 
OR (biobank.acronym LIKE '%%' OR '' IS NULL) 
OR (biobankattributelists.attributeListName LIKE '%%' OR '' IS NULL) 
OR (biobankattributelists.attributeListValue LIKE '%%' OR '' IS NULL)) 
AND (biobank.countryCode = '' OR '' = '')

结果为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。为小图片道歉。如果在新标签中打开它会更大。

1 个答案:

答案 0 :(得分:1)

您正在使用的Liferay产生的查询令人分心。但它似乎是正确的。希望所有那些奇怪的OR '' IS NULL条款都不会破坏性能。

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

此处的问题是格式化显示结果集。正如您所指出的,您需要的所有信息都在结果集中。你需要做什么,用你的宿主语言(Java?php?我们无法从你的问题中说出来),读取结果集并构建你的输出。

如果您可以修改查询,我建议您将此ORDER BY子句添加到其结尾。

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

您希望这样,结果集的行将按照您构建输出所需的顺序显示。

然后,您希望在主机程序中实现人们称之为控制中断逻辑的报告。也就是说,每当列的值从其先前值更改时,您希望执行一些特殊操作。例如,每次组织名称更改时,您都希望显示新的组织名称。

尊重,教你这样做超出了SO答案的范围。