@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'");
}
  • Вопрос задан
  • 119 просмотров
Пригласить эксперта
Ответы на вопрос 2
Alex_Wells
@Alex_Wells
PHP/TS developer
Как я понял, вы хотите, что бы "части кода" запускались асинхронно, верно? Так вот не выйдет. В других языках - да (js к примеру). С какими-то хаками - тоже да. Очереди - да, но все это займет больше времени чем выполнение вашего кода разом, это не имеет вообще никакого смысла в этом контексте, да и вам попросту рано туда.

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

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

Войти через TM ID
Похожие вопросы
Ticketland.ru Москва
от 120 000 руб.
Интерно Ростов-на-Дону
от 35 000 до 50 000 руб.
СиСорт Барнаул
от 40 000 до 115 000 руб.