diff --git a/core/dbunionsearch.class.php b/core/dbunionsearch.class.php index 07f2b8cee..d2c07fb7d 100644 --- a/core/dbunionsearch.class.php +++ b/core/dbunionsearch.class.php @@ -496,19 +496,30 @@ class DBUnionSearch extends DBSearch $aSearchSelectedClasses[$sSearchAlias] = $this->aSelectedClasses[$sAlias]; } - if (is_null($aAttToLoad)) + if ($bGetCount) { - $aQueryAttToLoad = null; + // Select only ids for the count to allow optimization of joins + foreach($aSearchAliases as $sSearchAlias) + { + $aQueryAttToLoad[$sSearchAlias] = array(); + } } else { - // (Eventually) Transform the aliases - $aQueryAttToLoad = array(); - foreach ($aAttToLoad as $sAlias => $aAttributes) + if (is_null($aAttToLoad)) { - $iColumn = array_search($sAlias, $aAliases); - $sQueryAlias = ($iColumn === false) ? $sAlias : $aSearchAliases[$iColumn]; - $aQueryAttToLoad[$sQueryAlias] = $aAttributes; + $aQueryAttToLoad = null; + } + else + { + // (Eventually) Transform the aliases + $aQueryAttToLoad = array(); + foreach($aAttToLoad as $sAlias => $aAttributes) + { + $iColumn = array_search($sAlias, $aAliases); + $sQueryAlias = ($iColumn === false) ? $sAlias : $aSearchAliases[$iColumn]; + $aQueryAttToLoad[$sQueryAlias] = $aAttributes; + } } } diff --git a/sources/renderer/bootstrap/fieldrenderer/bsselectobjectfieldrenderer.class.inc.php b/sources/renderer/bootstrap/fieldrenderer/bsselectobjectfieldrenderer.class.inc.php index c2d05a828..e770aaede 100644 --- a/sources/renderer/bootstrap/fieldrenderer/bsselectobjectfieldrenderer.class.inc.php +++ b/sources/renderer/bootstrap/fieldrenderer/bsselectobjectfieldrenderer.class.inc.php @@ -103,6 +103,7 @@ class BsSelectObjectFieldRenderer extends FieldRenderer $oOutput->AddHtml(''); // - Retrieving choices $oChoicesSet = new DBObjectSet($oSearch); + $oChoicesSet->OptimizeColumnLoad(array($oSearch->GetClassAlias() => array('friendlyname'))); while ($oChoice = $oChoicesSet->Fetch()) { // Note : The test is a double equal on purpose as the type of the value received from the XHR is not always the same as the type of the allowed values. (eg : string vs int)