Первый ряд выполняется только с использованием foreach в php - PullRequest
0 голосов
/ 04 мая 2020

У меня есть файл json, и я хочу поместить его в базу данных MySQL, но у меня возникли проблемы при импорте.

это мой json

    [
       {
          "b_id": "1",
          "m": "4000",
          "w": "5500",
          "d": "0",
          "side": "2",
          "user_id": "27",
          "lo": 10,
          "ro": 10,
          "pts": [
             {
                "amount": "3500",
                "side": "2",
                "user_id": "27",
                "b_id": "1",
                "fid": "2"
             },
             {
                "amount": "3000",
                "side": "1",
                "user_id": "27",
                "b_id": "1",
                "fid": "2"
             },
             {
                "amount": "2000",
                "side": "2",
                "user_id": "20",
                "b_id": "1",
                "fid": "2"
             },
             {
                "amount": "1000",
                "side": "1",
                "user_id": "20",
                "b_id": "1",
                "fid": "2"
             }
          ]
       },
       {
          "b_id": "2",
          "m": "6000",
          "w": "3000",
          "d": "0",
          "side": "1",
          "user_id": "27",
          "lo": 10,
          "ro": 9,
          "pts": [
             {
                "amount": "4000",
                "side": "1",
                "user_id": "27",
                "b_id": "2",
                "fid": "2"
             },
             {
                "amount": "2000",
                "side": "2",
                "user_id": "27",
                "b_id": "2",
                "fid": "2"
             },
             {
                "amount": "1000",
                "side": "2",
                "user_id": "20",
                "b_id": "2",
                "fid": "2"
             },
             {
                "amount": "2000",
                "side": "1",
                "user_id": "20",
                "b_id": "2",
                "fid": "2"
             }
          ]
       },
       {
          "b_id": "3",
          "m": "2000",
          "w": "3000",
          "d": "0",
          "side": "1",
          "user_id": "20",
          "lo": 10,
          "ro": 8,
          "pts": [
             {
                "amount": "2000",
                "side": "1",
                "user_id": "20",
                "b_id": "3",
                "fid": "2"
             },
             {
                "amount": "3000",
                "side": "2",
                "user_id": "20",
                "b_id": "3",
                "fid": "2"
             }
          ]
       },
       {
          "b_id": "4",
          "m": "3000",
          "w": "1000",
          "d": "0",
          "side": "2",
          "user_id": "20",
          "lo": 8,
          "ro": 6,
          "pts": [
             {
                "amount": "1000",
                "side": "2",
                "user_id": "20",
                "b_id": "4",
                "fid": "2"
             },
             {
                "amount": "3000",
                "side": "1",
                "user_id": "20",
                "b_id": "4",
                "fid": "2"
             }
          ]
       },
       {
          "b_id": "5",
          "m": "1000",
          "w": "2000",
          "d": "0",
          "side": "2",
          "user_id": "20",
          "lo": 3,
          "ro": 2,
          "pts": [
             {
                "amount": "2000",
                "side": "2",
                "user_id": "20",
                "b_id": "5",
                "fid": "2"
             },
             {
                "amount": "1000",
                "side": "1",
                "user_id": "20",
                "b_id": "5",
                "fid": "2"
             }
          ]
       }
    ]

И мой Код для выполнения и pu sh это на mysql базе данных

            function initializeBet($conn,$max) {
            $d = json_decode(file_get_contents('test.json'),true);
            foreach($d as $data => $row) {
                foreach($row['pts'] as $values => $pts) {
                 if(isNotNull($row['m'],$row['w'])) {
                  if(isMeronNotNull($row['m'],$row['w'])) {
                    if($pts['side'] == 2) {
                      $odds = getOdds($row['m'],$row['lo'],$row['ro']);
                      $ret = round(getMax($pts['amount'],$odds),2);
                      $amount = round(abs($pts['amount'] - $ret),2);

                       $points = "INSERT INTO bets(fid,bid,uid,side,amount) VALUES ('".$pts['fid']."','".$pts['b_id']."','".$pts['user_id']."','".$pts['side']."',$amount)";
                       $conn->query($points);

                      $users = "UPDATE users SET points = points + $ret WHERE id = '".$pts['user_id']."'";
                      $conn->query($users);
                    } else {
                      $_points = "INSERT INTO bets(fid,bid,uid,side,amount) VALUES ('".$pts['fid']."','".$pts['b_id']."','".$pts['user_id']."','".$pts['side']."','".$pts['amount']."')";
                      $conn->query($_points);
                   }
                  } else {
                    if($pts['side'] == 1) {
                      $odds = getOdds($row['w'],$row['ro'],$row['lo']);
                      $ret = round(getMax($pts['amount'],$odds),2);
                      $amount = round(abs($pts['amount'] - $ret),2);

                       $points = "INSERT INTO bets(fid,bid,uid,side,amount) VALUES ('".$pts['fid']."','".$pts['b_id']."','".$pts['user_id']."','".$pts['side']."',$amount)";
                       $conn->query($points);

                      $users = "UPDATE users SET points = points + $ret WHERE id = '".$pts['user_id']."'";
                      $conn->query($users);
                    } else {
                      $_points = "INSERT INTO bets(fid,bid,uid,side,amount) VALUES ('".$pts['fid']."','".$pts['b_id']."','".$pts['user_id']."','".$pts['side']."','".$pts['amount']."')";
                      $conn->query($_points);
                    }
                  }
                 } else if(isMeronIsNull($row['m'])) {
                    if($pts['side'] == 2) {
                     $am = $pts['amount'];
                     $users = "UPDATE users SET points = points + $am WHERE id = '".$pts['user_id']."'";
                     $conn->query($users);
                    }
                 } else if(isWalaIsNull($row['w'])) {
                    if($pts['side'] == 1) {
                     $am = $pts['amount'];
                     $users = "UPDATE users SET points = points + $am WHERE id = '".$pts['user_id']."'";
                     $conn->query($users);
                    }
                  }
               /* End */
               }
            }
        }

        function isNotNull($meron,$wala) {
            return isset($meron) && $meron != 0 && isset($wala) && $wala != 0;
        }

        function isMeronIsNull($meron) {
            return !isset($meron);
        }

        function isMeronNotNull($meron,$wala) {
            return $meron <= $wala;
        }

        function isWalaIsNull($wala) {
            return !isset($wala);
        }

        function getOdds($bets,$a,$b) {
           return ($bets * $b) / $a;
        }

        $bet = 0;
        function getMax($bets,$max) {
            global $bet;
            $ret = 0;
            if($bet < $max) {
                $bet += $bets;
                $ret = ($bet % $max);
                if($ret == $bet)
                    $ret = 0;
             }  else {
               $ret = $bets;
            }
            return $ret;
        }

проблема в том, что каждый раз, когда я выполняю его, первая строка будет выполняться только, а следующая строка вернется к 0, в чем проблема это

это результат, когда я выполняю код

     |    id        |   bid   |   fid    |   uid     |  side  | amount
     |    455     |    5     |    2     |    20     |    1     |    1000
     |    454     |    5     |    2     |    20     |    2     |    0
     |    453     |    4     |    2     |    20     |    1     |    0
     |    452     |    4     |    2     |    20     |    2     |    1000
     |    451     |    3     |    2     |    20     |    2     |    0
     |    450     |    3     |    2     |    20     |    1     |    2000
     |    449     |    2     |    2     |    20     |    1     |    0
     |    448     |    2     |    2     |    20     |    2     |    1000
     |    447     |    2     |    2     |    27     |    2     |    2000
     |    446     |    2     |    2     |    27     |    1     |    0
     |    445     |    1     |    2     |    20     |    1     |    1000
     |    444     |    1     |    2     |    20     |    2     |    500
     |    443     |    1     |    2     |    27     |    1     |    3000
     |    442     |    1     |    2     |    27     |    2     |    3500

, который равен 0 - это следующая строка первой строки. идентификатор auto_increment, первая строка 1 в bid

Спасибо

...