5 public static function GetList($arOrder,
$arFilter, $bGroup, $arNavStartParams, $arSelect)
9 if (!is_array($arSelect))
13 if (
count($arSelect) < 1)
22 foreach ($arSelect as $strColumn)
24 $strColumn = mb_strtoupper($strColumn);
25 if (preg_match(
'/^(MIN|MAX|AVG|SUM)_(.*)$/', $strColumn, $arMatch))
27 $strGroupFunc = $arMatch[1];
28 $strColumn = $arMatch[2];
43 case 'COMPONENT_NAME':
48 if ($strGroupFunc ===
'')
52 $arQueryGroup[$strColumn] =
'c.' . $strColumn;
54 $arQuerySelect[$strColumn] =
'c.' . $strColumn;
58 if ($strGroupFunc ===
'' && $bGroup)
60 $sql =
"case when sum((case when c.OP_MODE='W' then 1 else 0 end)+(case when c.OP_MODE='R' then 1 else 0 end)) > 0 then sum(case when c.OP_MODE='R' then 1 else 0 end)/sum((case when c.OP_MODE='W' then 1 else 0 end)+(case when c.OP_MODE='R' then 1 else 0 end)) else null end";
61 $arQuerySelect[$strColumn] = $sql .
' ' . $strColumn;
65 if ($strGroupFunc ===
'')
69 $arQueryGroup[$strColumn] =
$DB->Concat(
'c.BASE_DIR',
'c.INIT_DIR',
'c.FILE_NAME');
71 $arQuerySelect[$strColumn] =
$DB->Concat(
'c.BASE_DIR',
"','",
'c.INIT_DIR',
"','",
'c.FILE_NAME') .
' ' . $strColumn;
75 if ($strGroupFunc ===
'')
79 $arQuerySelect[$strColumn] =
'c.' . $strColumn;
86 $arQuerySelect[$strGroupFunc .
'_' . $strColumn] = $strGroupFunc .
'(c.' . $strColumn .
') ' . $strGroupFunc .
'_' . $strColumn;
91 if ($strGroupFunc ===
'' && $bGroup)
93 $arQuerySelect[$strColumn] =
'COUNT(c.ID) ' . $strColumn;
97 if ($strGroupFunc ===
'' && $bGroup)
99 $arQuerySelect[$strColumn] =
"SUM(case when c.OP_MODE='R' then 1 else 0 end) " . $strColumn;
103 if ($strGroupFunc ===
'' && $bGroup)
105 $arQuerySelect[$strColumn] =
"SUM(case when c.OP_MODE='W' then 1 else 0 end) " . $strColumn;
109 if ($strGroupFunc ===
'' && $bGroup)
111 $arQuerySelect[$strColumn] =
"SUM(case when c.OP_MODE='C' then 1 else 0 end) " . $strColumn;
117 if (!is_array($arOrder))
123 foreach ($arOrder as $strColumn => $strDirection)
125 $strColumn = mb_strtoupper($strColumn);
126 if (!array_key_exists($strColumn, $arQuerySelect))
131 if (preg_match(
'/^(MIN|MAX|AVG|SUM)_(.*)$/', $strColumn, $arMatch))
133 $strGroupFunc = $arMatch[1];
134 $strColumn = $arMatch[2];
141 $strDirection = mb_strtoupper($strDirection) ===
'ASC' ?
'ASC' :
'DESC';
150 case 'COMPONENT_NAME':
153 if ($strGroupFunc ===
'')
155 $arSelect[] = $strColumn;
156 $arQueryOrder[$strColumn] = $strColumn .
' ' . $strDirection;
164 if ($strGroupFunc ===
'' && $bGroup)
166 $arSelect[] = $strColumn;
167 $arQueryOrder[$strColumn] = $strColumn .
' ' . $strDirection;
172 !isset($arQueryOrder[
'BASE_DIR'])
173 && !isset($arQueryOrder[
'INIT_DIR'])
174 && !isset($arQueryOrder[
'FILE_NAME'])
175 && $strGroupFunc ===
''
178 $arSelect[] =
'BASE_DIR';
179 $arQueryOrder[
'BASE_DIR'] =
'BASE_DIR ' . $strDirection;
180 $arSelect[] =
'INIT_DIR';
181 $arQueryOrder[
'INIT_DIR'] =
'INIT_DIR ' . $strDirection;
182 $arSelect[] =
'FILE_NAME';
183 $arQueryOrder[
'FILE_NAME'] =
'FILE_NAME ' . $strDirection;
188 !isset($arQueryOrder[
'BASE_DIR'])
189 && !isset($arQueryOrder[
'INIT_DIR'])
190 && $strGroupFunc ===
''
193 $arSelect[] =
'BASE_DIR';
194 $arQueryOrder[
'BASE_DIR'] =
'BASE_DIR ' . $strDirection;
195 $arSelect[] =
'INIT_DIR';
196 $arQueryOrder[
'INIT_DIR'] =
'INIT_DIR ' . $strDirection;
200 if ($strGroupFunc ===
'')
204 $arSelect[] = $strColumn;
205 $arQueryOrder[$strColumn] = $strColumn .
' ' . $strDirection;
212 $arSelect[] = $strColumn;
213 $arQueryOrder[$strGroupFunc .
'_' . $strColumn] = $strGroupFunc .
'_' . $strColumn .
' ' . $strDirection;
221 static $arWhereFields = [
223 'TABLE_ALIAS' =>
'c',
224 'FIELD_NAME' =>
'c.ID',
225 'FIELD_TYPE' =>
'int',
229 'TABLE_ALIAS' =>
'c',
230 'FIELD_NAME' =>
'c.HIT_ID',
231 'FIELD_TYPE' =>
'int',
235 'TABLE_ALIAS' =>
'c',
236 'FIELD_NAME' =>
'c.COMPONENT_ID',
237 'FIELD_TYPE' =>
'int',
241 'TABLE_ALIAS' =>
'c',
242 'FIELD_NAME' =>
'c.OP_MODE',
243 'FIELD_TYPE' =>
'string',
247 'TABLE_ALIAS' =>
'c',
248 'FIELD_NAME' =>
'c.MODULE_NAME',
249 'FIELD_TYPE' =>
'string',
252 'COMPONENT_NAME' => [
253 'TABLE_ALIAS' =>
'c',
254 'FIELD_NAME' =>
'c.COMPONENT_NAME',
255 'FIELD_TYPE' =>
'string',
259 'TABLE_ALIAS' =>
'c',
260 'FIELD_NAME' =>
'c.BASE_DIR',
261 'FIELD_TYPE' =>
'string',
265 'TABLE_ALIAS' =>
'c',
266 'FIELD_NAME' =>
'c.INIT_DIR',
267 'FIELD_TYPE' =>
'string',
271 'TABLE_ALIAS' =>
'c',
272 'FIELD_NAME' =>
'c.FILE_NAME',
273 'FIELD_TYPE' =>
'string',
277 $obQueryWhere->
SetFields($arWhereFields);
279 if (
count($arQuerySelect) < 1)
281 $arQuerySelect = [
'ID' =>
'c.ID'];
284 $strQueryWhere = $obQueryWhere->GetQuery(
$arFilter);
288 &&
count($arQueryGroup) > 0
292 $strHaving =
'HAVING COUNT(*) > ' . intval(
$arFilter[
'COUNT']);
295 if (is_array($arNavStartParams) && isset($arNavStartParams[
'nTopCount']) && $arNavStartParams[
'nTopCount'] > 0)
297 $strSql =
$DB->TopSQL(
'
298 SELECT ' . implode(
', ', $arQuerySelect) .
'
300 ' . $obQueryWhere->GetJoins() .
'
301 ' . ($strQueryWhere ?
'WHERE ' . $strQueryWhere :
'') .
'
302 ' . ($bGroup ?
'GROUP BY ' . implode(
', ', $arQueryGroup) :
'') .
'
304 ' . (
count($arQueryOrder) ?
'ORDER BY ' . implode(
', ', $arQueryOrder) :
'') .
'
305 ', $arNavStartParams[
'nTopCount']);
308 elseif (is_array($arNavStartParams))
311 SELECT count('x') CNT
313 " . $obQueryWhere->GetJoins() .
'
314 ' . ($strQueryWhere ?
'WHERE ' . $strQueryWhere :
'') .
'
315 ' . ($bGroup ?
'GROUP BY ' . implode(
', ', $arQueryGroup) :
'') .
'
318 $res_cnt =
$DB->Query($strSql);
319 $ar_cnt = $res_cnt->Fetch();
322 SELECT ' . implode(
', ', $arQuerySelect) .
'
324 ' . $obQueryWhere->GetJoins() .
'
325 ' . ($strQueryWhere ?
'WHERE ' . $strQueryWhere :
'') .
'
326 ' . ($bGroup ?
'GROUP BY ' . implode(
', ', $arQueryGroup) :
'') .
'
328 ' . (
count($arQueryOrder) ?
'ORDER BY ' . implode(
', ', $arQueryOrder) :
'') .
'
330 $res =
new CDBResult();
331 $res->NavQuery($strSql, $ar_cnt[
'CNT'], $arNavStartParams);
336 SELECT ' . implode(
', ', $arQuerySelect) .
'
338 ' . $obQueryWhere->GetJoins() .
'
339 ' . ($strQueryWhere ?
'WHERE ' . $strQueryWhere :
'') .
'
340 ' . ($bGroup ?
'GROUP BY ' . implode(
', ', $arQueryGroup) :
'') .
'
341 ' . (
count($arQueryOrder) ?
'ORDER BY ' . implode(
', ', $arQueryOrder) :
'') .
'