@m_xplay_official

Проблема с циклом foreach?

Возникла такая вот проблема, имеется цикл foreach с выборкой данных из бд, внутри этого цикла имеется условие if, в этом условии присутствует две части кода: первая часть отвечает за запись необходимых данных в бд, а вторая часть, на основе записанных, из первой части данных, делает необходимые расчеты. Так вот как сделать так, что бы сначала, в этом цикле, выполнилась первая часть кода а после начала выполняться вторая часть кода? Есть ли возможность реализовать данную проблему?

if( isset($data['management_a_scam']) ) {
  $data_id = $data['management_a_id'];
  $data_url = $data['management_a_url'];
  $data_url = $data['management_a_url'];
  $user_input_query = mysqli_query($CONNECT, "SELECT `users` AS name_user, sum(`vklad`) AS sum_vklad, sum(TIMESTAMPDIFF(DAY, `date`, CURDATE())) AS `sum_date_diff` FROM `refback` WHERE `moderation` = 'off' AND `status` = 'on' AND `url` = '$data_url'  GROUP BY `users`");
  foreach($user_input_query as $massiv) {
    $derived_from_game = (($massiv['sum_vklad']*29/30)/100)*$massiv['sum_date_diff']; #Подсчитываем вывод с игры пользователем за N-ый промежуток времени
    $amount_loss_user = $massiv['sum_vklad']-$derived_from_game; #Подсчитываем сумму убытока пользователя
    if ($amount_loss_user > 0) {
      #Первая часть
      $insurance = R::dispense('insurance');
      $insurance->games = $data['management_a_name'];
      $insurance->hash = $data['management_a_id'];
      $insurance->users = $massiv['name_user'];
      $insurance->loss = number_format($amount_loss_user, 2, '.', '');
      $insurance->to_accrual = number_format(0, 2, '.', '');
      R::store($insurance);
      #Вторая часть
      $data_ID = $data['management_a_id'];
      $insurance_total_summ_query = mysqli_query($CONNECT, "SELECT sum(`loss`) FROM `insurance` WHERE `hash` = '$data_ID'");
      $insurance_total_summ = mysqli_fetch_array($insurance_total_summ_query);
      $count_massiv = count($massiv);
      $calc_insurance = ($data['management_a_insurance']/$insurance_total_summ[0])*$amount_loss_user;
      $insurance_user_update = $massiv['name_user'];

      $insurance_update = mysqli_query($CONNECT, "UPDATE `insurance` SET `to_accrual` = '$calc_insurance' WHERE `users` = '$insurance_user_update' AND `hash` = '$data_ID'");
                mysqli_query($CONNECT, "UPDATE `users` SET `balance` = `balance` + '$calc_insurance' WHERE `login` = '$insurance_user_update'");
    }
  }
  #$other = mysqli_query($CONNECT, "UPDATE `games` SET `scam` = 'on' WHERE `id`='$data_id'");
       #mysqli_query($CONNECT, "UPDATE `refback` SET `status` = 'off' WHERE `url`='$data_url'");
}
  • Вопрос задан
  • 124 просмотра
Пригласить эксперта
Ответы на вопрос 2
Alex_Wells
@Alex_Wells
PHP/TS developer
Как я понял, вы хотите, что бы "части кода" запускались асинхронно, верно? Так вот не выйдет. В других языках - да (js к примеру). С какими-то хаками - тоже да. Очереди - да, но все это займет больше времени чем выполнение вашего кода разом, это не имеет вообще никакого смысла в этом контексте, да и вам попросту рано туда.

Не морочьте себе голову. Хотите оптимизировать - делайте на SQL, трех запросов в общем тут должно быть более чем достаточно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
HTML Academy Санкт-Петербург
от 110 000 до 130 000 руб.
CENTRA Новокузнецк
от 60 000 руб.
от 1 500 до 2 500 usd.
26 марта 2019, в 12:03
10000 руб./за проект
26 марта 2019, в 11:56
1 руб./за проект