From 38b10b6c106c99229e484084908f2d11477ce175 Mon Sep 17 00:00:00 2001 From: Pierre Goiffon Date: Thu, 29 Mar 2018 15:47:42 +0000 Subject: [PATCH] =?UTF-8?q?N=C2=B01330=20Header=20with=20statistics=20dash?= =?UTF-8?q?let=20perf=20improvements=20Now=20uses=20one=20count=20+=20grou?= =?UTF-8?q?p=20by=20query=20instead=20of=20one=20count=20query=20per=20gro?= =?UTF-8?q?uping=20value?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SVN:trunk[5576] --- application/displayblock.class.inc.php | 28 ++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/application/displayblock.class.inc.php b/application/displayblock.class.inc.php index ab12d90a8..10366d534 100644 --- a/application/displayblock.class.inc.php +++ b/application/displayblock.class.inc.php @@ -782,21 +782,37 @@ class DisplayBlock { $aStates = explode(',', $sStatesList); $oAttDef = MetaModel::GetAttributeDef($sClass, $sStateAttrCode); + + // Generate one count + group by query [#1330] + $oGroupByExpr = Expression::FromOQL($sClass.'.'.$sStateAttrCode); + $aGroupBy = array('group1' => $oGroupByExpr); + $sCountGroupByQuery = $this->m_oFilter->MakeGroupByQuery(array(), $aGroupBy, false); + $aCountGroupByResults = CMDBSource::QueryToArray($sCountGroupByQuery); + $aCountsQueryResults = array(); + foreach ($aCountGroupByResults as $aCountGroupBySingleResult) + { + $aCountsQueryResults[$aCountGroupBySingleResult[0]] = $aCountGroupBySingleResult[1]; + } + foreach($aStates as $sStateValue) { - $oFilter = $this->m_oFilter->DeepClone(); - $oFilter->AddCondition($sStateAttrCode, $sStateValue, '='); - $oSet = new DBObjectSet($oFilter); - $oSet->SetShowObsoleteData($this->m_bShowObsoleteData); - $aCounts[$sStateValue] = $oSet->Count(); $aStateLabels[$sStateValue] = htmlentities($oAttDef->GetValueLabel($sStateValue), ENT_QUOTES, 'UTF-8'); + + $aCounts[$sStateValue] = (array_key_exists($sStateValue, $aCountsQueryResults)) + ? $aCountsQueryResults[$sStateValue] + : 0; + if ($aCounts[$sStateValue] == 0) { $aCounts[$sStateValue] = '-'; } else { - $sHyperlink = utils::GetAbsoluteUrlAppRoot().'pages/UI.php?operation=search&'.$oAppContext->GetForLink().'&filter='.urlencode($oFilter->serialize()); + $oSingleGroupByValueFilter = $this->m_oFilter->DeepClone(); + $oSingleGroupByValueFilter->AddCondition($sStateAttrCode, $sStateValue, '='); + $sHyperlink = utils::GetAbsoluteUrlAppRoot() + .'pages/UI.php?operation=search&'.$oAppContext->GetForLink() + .'&filter='.urlencode($oSingleGroupByValueFilter->serialize()); $aCounts[$sStateValue] = "{$aCounts[$sStateValue]}"; } }