Ява — форматировать результаты, выбранные запросом для отображения

У меня есть следующее 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 '' = '')

Результат введите описание изображения здесь

Важные столбцы, чтобы отметить здесь 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 отформатировать результат запроса так, как я хочу, чтобы он отображался.

Постскриптум Извиняюсь за маленькую картинку. Это намного больше, если открыть в новой вкладке.

0

Решение

Ваш запрос, сгенерированный этой вещью Liferay, которую вы используете, отвлекающе странен. Но это кажется правильным. Надеюсь, все эти странные OR '' IS NULL пункты не портят производительность.

Вы, кажется, имеете дело со схемой имя / значение в вашем biobankattributelists Таблица.

Ваша проблема здесь заключается в форматировании набора результатов для отображения. Как вы указали, вся необходимая информация находится в наборе результатов. Что вам нужно сделать, на вашем языке хоста (Java? Php? Мы не можем сказать по вашему вопросу), это прочитать набор результатов и сконструировать ваш вывод.

Если вы можете изменить запрос, я предлагаю вам добавить это ORDER BY пункт до его конца.

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

Вы хотите, чтобы строки результирующего набора отображались в том порядке, в котором они вам нужны для построения выходных данных.

Затем вы хотите реализовать в своей основной программе то, что люди, пишущие отчеты, называют логика прерывания управления. То есть вы хотите делать что-то особенное каждый раз, когда значение столбца изменяется по сравнению с его предыдущим значением. Например, каждый раз, когда изменяется название организации, вы хотите отобразить новое имя организации.

С уважением, это выходит за рамки SO ответа, чтобы научить вас делать это.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]