5 public static function GetList($arOrder,
$arFilter, $bGroup, $arNavStartParams, $arSelect)
9 if (!is_array($arSelect))
13 if (
count($arSelect) < 1)
20 if (!is_array($arOrder))
24 if (
count($arOrder) < 1)
32 foreach ($arOrder as $strColumn => $strDirection)
34 $strColumn = mb_strtoupper($strColumn);
35 if (preg_match(
'/^(MIN|MAX|AVG|SUM)_(.*)$/', $strColumn, $arMatch))
37 $strGroupFunc = $arMatch[1];
38 $strColumn = $arMatch[2];
45 $strDirection = mb_strtoupper($strDirection) ===
'ASC' ?
'ASC' :
'DESC';
50 case 'REQUEST_METHOD':
55 if ($strGroupFunc ===
'')
57 $arSelect[] = $strColumn;
58 $arQueryOrder[$strColumn] = $strColumn .
' ' . $strDirection;
61 case 'INCLUDED_FILES':
62 case 'MEMORY_PEAK_USAGE':
72 case 'PROLOG_BEFORE_TIME':
74 case 'PROLOG_AFTER_TIME':
75 case 'WORK_AREA_TIME':
77 case 'EPILOG_BEFORE_TIME':
79 case 'EPILOG_AFTER_TIME':
81 case 'COMPONENTS_TIME':
82 if ($strGroupFunc ===
'')
86 $arSelect[] = $strColumn;
87 $arQueryOrder[$strColumn] = $strColumn .
' ' . $strDirection;
94 $arSelect[] = $strGroupFunc .
'_' . $strColumn;
95 $arQueryOrder[$strGroupFunc .
'_' . $strColumn] = $strGroupFunc .
'_' . $strColumn .
' ' . $strDirection;
100 if ($strGroupFunc ===
'' && !$bGroup)
102 $arSelect[] = $strColumn;
103 $arQueryOrder[$strColumn] =
'TMP_DH ' . $strDirection;
107 if ($strGroupFunc ===
'' && $bGroup)
109 $arSelect[] = $strColumn;
110 $arQueryOrder[$strColumn] = $strColumn .
' ' . $strDirection;
118 foreach ($arSelect as $strColumn)
120 $strColumn = mb_strtoupper($strColumn);
121 if (preg_match(
'/^(MIN|MAX|AVG|SUM)_(.*)$/', $strColumn, $arMatch))
123 $strGroupFunc = $arMatch[1];
124 $strColumn = $arMatch[2];
135 case 'REQUEST_METHOD':
141 if ($strGroupFunc ===
'')
145 $arQueryGroup[$strColumn] =
'h.' . $strColumn;
147 $arQuerySelect[$strColumn] =
'h.' . $strColumn;
150 case 'INCLUDED_FILES':
151 case 'MEMORY_PEAK_USAGE':
153 case 'CACHE_COUNT_R':
154 case 'CACHE_COUNT_W':
155 case 'CACHE_COUNT_C':
160 case 'PROLOG_BEFORE_TIME':
162 case 'PROLOG_AFTER_TIME':
163 case 'WORK_AREA_TIME':
165 case 'EPILOG_BEFORE_TIME':
167 case 'EPILOG_AFTER_TIME':
169 case 'COMPONENTS_TIME':
170 if ($strGroupFunc ===
'')
174 $arQuerySelect[$strColumn] =
'h.' . $strColumn;
181 $arQuerySelect[$strGroupFunc .
'_' . $strColumn] = $strGroupFunc .
'(h.' . $strColumn .
') ' . $strGroupFunc .
'_' . $strColumn;
186 if ($strGroupFunc ===
'')
190 $arQuerySelect[$strColumn] =
'(h.CACHE_COUNT_R + h.CACHE_COUNT_W + h.CACHE_COUNT_C) CACHE_COUNT';
197 $arQuerySelect[$strGroupFunc .
'_' . $strColumn] = $strGroupFunc .
'(h.CACHE_COUNT_R + h.CACHE_COUNT_W + h.CACHE_COUNT_C) ' . $strGroupFunc .
'_' . $strColumn;
202 if ($strGroupFunc ===
'' && !$bGroup)
204 $arQuerySelect[
'TMP_DH'] =
'h.' . $strColumn .
' TMP_DH';
205 $arQuerySelect[$strColumn] =
$DB->DateToCharFunction(
'h.' . $strColumn,
'SHORT') .
' ' . $strColumn;
206 $arQuerySelect[
'FULL_' . $strColumn] =
$DB->DateToCharFunction(
'h.' . $strColumn,
'FULL') .
' FULL_' . $strColumn;
210 if ($strGroupFunc ===
'' && $bGroup)
212 $arQuerySelect[$strColumn] =
'COUNT(h.ID) ' . $strColumn;
218 static $arWhereFields = [
220 'TABLE_ALIAS' =>
'h',
221 'FIELD_NAME' =>
'h.SCRIPT_NAME',
222 'FIELD_TYPE' =>
'string',
227 'TABLE_ALIAS' =>
'h',
228 'FIELD_NAME' =>
'h.IS_ADMIN',
229 'FIELD_TYPE' =>
'string',
232 'REQUEST_METHOD' => [
233 'TABLE_ALIAS' =>
'h',
234 'FIELD_NAME' =>
'h.REQUEST_METHOD',
235 'FIELD_TYPE' =>
'string',
239 'TABLE_ALIAS' =>
'h',
240 'FIELD_NAME' =>
'ID',
241 'FIELD_TYPE' =>
'int',
245 'TABLE_ALIAS' =>
'h',
246 'FIELD_NAME' =>
'h.CACHE_TYPE',
247 'FIELD_TYPE' =>
'string',
251 'TABLE_ALIAS' =>
'h',
252 'FIELD_NAME' =>
'h.MENU_RECALC',
253 'FIELD_TYPE' =>
'int',
259 $obQueryWhere->
SetFields($arWhereFields);
261 if (
count($arQuerySelect) < 1)
263 $arQuerySelect = [
'ID' =>
'h.ID'];
266 $strQueryWhere = $obQueryWhere->GetQuery(
$arFilter);
268 if ($bGroup &&
count($arQueryGroup) > 0)
274 'FIELD_NAME' =>
'COUNT(h.ID)',
275 'FIELD_TYPE' =>
'int',
279 $strHaving = $obQueryHaving->GetQuery(
$arFilter);
282 $strHaving =
'HAVING ' . $strHaving .
' ';
286 if (is_array($arNavStartParams) && isset($arNavStartParams[
'nTopCount']) && $arNavStartParams[
'nTopCount'] > 0)
288 $strSql =
$DB->TopSQL(
'
289 SELECT ' . implode(
', ', $arQuerySelect) .
'
291 ' . $obQueryWhere->GetJoins() .
'
292 ' . ($strQueryWhere ?
'WHERE ' . $strQueryWhere :
'') .
'
293 ' . ($bGroup &&
count($arQueryGroup) > 0 ?
'GROUP BY ' . implode(
', ', $arQueryGroup) :
'') .
'
295 ' . (
count($arQueryOrder) ?
'ORDER BY ' . implode(
', ', $arQueryOrder) :
'') .
'
296 ', $arNavStartParams[
'nTopCount']);
299 elseif (is_array($arNavStartParams))
302 SELECT count('x') CNT
304 " . $obQueryWhere->GetJoins() .
'
305 ' . ($strQueryWhere ?
'WHERE ' . $strQueryWhere :
'') .
'
306 ' . ($bGroup &&
count($arQueryGroup) > 0 ?
'GROUP BY ' . implode(
', ', $arQueryGroup) :
'') .
'
309 $res_cnt =
$DB->Query($strSql);
314 while ($ar_cnt = $res_cnt->Fetch())
321 $ar_cnt = $res_cnt->Fetch();
326 SELECT ' . implode(
', ', $arQuerySelect) .
'
328 ' . $obQueryWhere->GetJoins() .
'
329 ' . ($strQueryWhere ?
'WHERE ' . $strQueryWhere :
'') .
'
330 ' . ($bGroup &&
count($arQueryGroup) > 0 ?
'GROUP BY ' . implode(
', ', $arQueryGroup) :
'') .
'
332 ' . (
count($arQueryOrder) ?
'ORDER BY ' . implode(
', ', $arQueryOrder) :
'') .
'
334 $res =
new CDBResult();
335 $res->NavQuery($strSql, $c, $arNavStartParams);
340 SELECT ' . implode(
', ', $arQuerySelect) .
'
342 ' . $obQueryWhere->GetJoins() .
'
343 ' . ($strQueryWhere ?
'WHERE ' . $strQueryWhere :
'') .
'
344 ' . ($bGroup &&
count($arQueryGroup) > 0 ?
'GROUP BY ' . implode(
', ', $arQueryGroup) :
'') .
'
346 ' . (
count($arQueryOrder) ?
'ORDER BY ' . implode(
', ', $arQueryOrder) :
'') .
'