Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Как корректно переписать код / 13 сообщений из 13, страница 1 из 1
14.05.2014, 14:09
    #38640967
Challenger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как корректно переписать код
На сайте Bitrix используется такой php код, который генерирует очень много обращений к БД и работает медленно.

Подскажите пожалуйста, как корректно этот код переписать, чтобы не было огромного количества обращений к БД my sql.

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
<?
foreach ($arrAnswers as $key0 => $arAnsw)
{
  $arrrResss = CFormResult::GetByID($key0);
  $arRes[$key0] = $arrrResss->Fetch();
 if ($arAnsw["8"] != NULL && $arAnsw["8"]["0"]["USER_TEXT"] != "" && ($arRes[$key0]["STATUS_ID"] == "3" || $arRes[$key0]["STATUS_ID"] == "8"))
 {
  foreach ($arAnsw["7"] as $key1 => $SectVal)
   $SName = $SectVal["ANSWER_TEXT"];
   $SCode = $SectVal["ANSWER_VALUE"];
   $AllAnswCount++;
  if (array_key_exists($SCode, $arrSections))
  {
   $arrSections[$SCode]["COUNT"]= $arrSections[$SCode]["COUNT"] + 1;
  }  
  else
  {
   $arrSections[$SCode]["COUNT"]= 1;
   $arrSections[$SCode]["NAME"]= $SName;
  }
  if (($SCode == $CurrentDirCode) || ($CurrentDirCode == NULL))
  {
   $AnsCount++;
  }
 }
}
?>
...
Рейтинг: 0 / 0
14.05.2014, 14:16
    #38640995
r u
r u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как корректно переписать код
Challenger,

похоже запросы есть как минимум тут
$arrrResss = CFormResult::GetByID($key0);
$arRes[$key0] = $arrrResss->Fetch();

тоесть идет отдельный запрос для каждого $key0

вместо этого можно выбрать ВСЁ сразу одним запросом, зная все ключи которые нам понадобятся. а это array_keys($arrAnswers)

далее надо найти функцию которая умеет выбирать не по одному ключу а если указан массив
...
Рейтинг: 0 / 0
14.05.2014, 14:30
    #38641028
Challenger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как корректно переписать код
r u,

Спасибо за быстрый ответ.

Я немного чайник в php
...
Рейтинг: 0 / 0
14.05.2014, 14:32
    #38641033
Challenger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как корректно переписать код
Challengerr u,

Спасибо за быстрый ответ.

Я немного чайник в php

Есть метод cFormResult.GetList, чтобы скопом корректно все выдернуть.

Как корректно все это здесь переписать, чтобы скопом все получить?
...
Рейтинг: 0 / 0
14.05.2014, 16:05
    #38641210
Challenger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как корректно переписать код
Может кто-то здесь помочь?
...
Рейтинг: 0 / 0
14.05.2014, 16:48
    #38641288
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как корректно переписать код
Challenger,

Вам лучше на форму битрикса написать.

запросы идут в первом цикле
...
Рейтинг: 0 / 0
14.05.2014, 16:51
    #38641296
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как корректно переписать код
Код: php
1.
2.
$arrrResss = CFormResult::GetByID($key0);
  $arRes[$key0] = $arrrResss->Fetch();


и только чтобы проверить какой то статус. Умно черт побери!
т.е. сколько у нас записей в $arrAnswers, столько и запросов.

Можно вытащить этот статус сразу при формировании $arrAnswers вот этого массива, тогда эти запросы отпадут.

Или включить кеш, он очень сильно спасает это чудо систему в быстродействии.

офтопбитрикс УГ (имхо).
...
Рейтинг: 0 / 0
14.05.2014, 16:59
    #38641317
Challenger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как корректно переписать код
SharuPoNemnogu, $arrAnswers формируется так

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
$arrColumns = array(); 
$arrAnswers = array();
$arrAnswersVarname = array();
$arrSections = array();
$arRes = array();
if (CModule::IncludeModule("form"))
{
CForm::GetResultAnswerArray(
 "1",
 $arrColumns, 
 $arrAnswers, 
 $arrAnswersVarname
);}
$arrColumns = array_reverse($arrColumns, true); 
$arrAnswers = array_reverse($arrAnswers, true);
$arrAnswersVarname = array_reverse($arrAnswersVarname, true);



Подскажите как убрать здесь эти запросы в первоначальном тексте?

Код: php
1.
2.
$arrrResss = CFormResult::GetByID($key0);
$arRes[$key0] = $arrrResss->Fetch();
...
Рейтинг: 0 / 0
14.05.2014, 17:12
    #38641340
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как корректно переписать код
Challenger,

CForm::GetResultAnswerArray вот сюда надо лезть...

но при обновлении у вас все навернется
...
Рейтинг: 0 / 0
14.05.2014, 17:20
    #38641354
Challenger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как корректно переписать код
SharuPoNemnogu,

Можете точнее подсказать, что надо поменять?

Если корректно поменяем, то надеюсь ничего не поломается при обновлении.
...
Рейтинг: 0 / 0
14.05.2014, 17:23
    #38641360
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как корректно переписать код
Надо соединить запрос на выборку вот этого $arrAnswers с запросом на выборку $arrrResss = CFormResult::GetByID($key0); вот этого. Тогда у вас будет все в 1 массиве и не надо будет делать кучу запросов в цикле чтобы вытащить какой то там статус.
...
Рейтинг: 0 / 0
14.05.2014, 17:26
    #38641363
Challenger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как корректно переписать код
SharuPoNemnogu,

Я не очень понимаю как это сделать, так как почти не касаюсь php.

Можешь здесь подсказать, как это правильно написать?
...
Рейтинг: 0 / 0
14.05.2014, 17:27
    #38641366
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как корректно переписать код
Challenger,

нет, это надо код ковырять, искать, думать... Напишите на профильный форум, может там лучше решение есть.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Как корректно переписать код / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]