2016-07-21 16 views
1

私は3つのテーブルのデータをプルし、最高の探していないいくつかの計算を行うPHPスクリプトがありますが、私は持っている問題は動作します。今ではここでしか数100 50分を行うことができるコードPHPの助けをより効果的に

<?php 
    //my sql 
    ini_set('max_execution_time', 3000); 
    $servername = "x.x.x.x"; 
    $username = "uaer"; 
    $password = "psass"; 
    $dbname = "evemur"; 
    $avgvar = "10"; 
    //mysql con string 
    $con = mysqli_connect("127.0.0.1", "root", "", "evemur"); 
    $sql = "SELECT * FROM `industryactivityproducts` WHERE `activityID` = 1 ORDER BY `typeID` ASC "; 
    $result = mysqli_query($con, $sql) or die(mysqli_error($con)); 
    $reret = mysqli_num_rows($result); 
    for ($x = 0; $x <= $reret -1; $x++) { 
     $row = mysqli_fetch_row($result); 

     $blue = $row[0]; 

     $ter = $row[1]; 
     $fitem = $row[2]; 
     $dqut = $row[3]; 
     $cost = 0; 
     $sql2 = "SELECT * FROM `industryactivitymaterials` WHERE `typeID` = $blue AND `activityID` = 1 ORDER BY `typeID` ASC "; 
     $result2 = mysqli_query($con, $sql2) or die(mysqli_error($con)); 
     // retures the mat to make and qut 
     $reret4 = mysqli_num_rows($result2); 
     for ($s = 0; $s <= $reret4 -1; $s++) { 
      $reret2 = mysqli_fetch_row($result2); 
      $mat = $reret2[2]; 
      $matq = $reret2[3]; 
      for ($f = 0; $f <= 1 -1; $f++) { 
       $avgprice = 0; 
       $sql3 = "SELECT * FROM `items` WHERE `Buy` NOT LIKE '1' AND `Volume Entered` >1 AND `Type` = $mat ORDER BY `Price` ASC "; 
       $result3 = mysqli_query($con, $sql3) or die(mysqli_error($con)); 
       for ($d = 0; $d <= $avgvar; $d++) { 
        $row3 = mysqli_fetch_row($result3); 
        $avgprice = $avgprice + $row3[2]; 
       } 

       $avgprice = $avgprice/($avgvar + 1); 
       $cost = $cost + ($avgprice * $matq); 
       $avgprice = number_format($avgprice, 2, '.', ','); 
       echo $avgprice . " ".$mat. "<br>"; 
      } 

     } 

     $sql5 = "SELECT * FROM `items` WHERE `Buy` NOT LIKE '' AND `Type` = $fitem ORDER BY `items`.`Price` DESC "; 
     $result5 = mysqli_query($con, $sql5) or die(mysqli_error($con)); 
     $row5 = mysqli_fetch_row($result5); 
     $pfit = $row5[2] * $dqut; 
     $pfit1 = $pfit - $cost; 
     $cost = number_format($cost, 2, '.', ','); 
     $pfit1 = number_format($pfit1, 2, '.', ','); 
     echo $fitem." cost:" . $cost ." ". "you make " . $pfit1 ; 
    } 
?> 
+0

PHPスクリプト以外にも、多くのネストループを回避するためにデータベースを正規化する必要があります。 –

+0

あなたのループマンを減らす必要があります。結合を利用する。私は、 '$ blue'はtypeIDであり、どちらもtypeIDフィールドを持っているので、' industrialactivitymaterials'との結合を実行するために使用できると推測しています。コードの '痛みポイント'を抽出してテーブルスキーマを提供すれば、より良い助けを得ることができます。 –

+0

'for($ f = 0; $ f <= 1 -1; $ f ++){'は決して実行しないようです。 –

答えて

1

はあなたではなく、すべてのループでMYSQLの機能を実行するよりも、ループに入る前に、テーブルからすべてのデータをロードする必要があります。これにより、スクリプトの速度が大幅に向上します。

それ以外の場合は、基本的な数学演算を実行しているだけなので、速度に関してはあまり改善されません。

関連する問題