2016-07-14 35 views
-1

我有一個產品數據庫,table1包含當前價格,table2包含以前的價格。帶有數據庫數據的百分比計算失敗

我要計算每個項目,就是在價格上的差異,就是在百分比差異。

出於某種原因,百分比計算不工作,並返回一個零。

要確保我的計算本身是好的,我把同樣的產品,併爲起初我取了DB後確定的項目值,以及二審的計算是直接從DB。

只有第一種情形下正常工作,returing -17%差異。

代碼:

<?php 

/* database section start */ 
    $mysqli = new mysqli("db","user","pass","db_name"); 

    if (mysqli_connect_errno()) { 
     printf("Connect failed: %s\n", mysqli_connect_error()); 
     exit(); 
    } 
/* database section end */ 

// Choose Relevant Products, and turn them into an array 
$item_array = array(
'item1', 
'item1' 
); 

//implode items, turn into string 
$item_implode = join("','", $item_array); 

//declare an overall array for result 
$product = array(); 

$result = $mysqli->query("SELECT p.Name, p.now_price, h.was_price FROM table1 p LEFT JOIN table2 h ON p.ProductId = h.ProductId WHERE p.Name IN ('$item_implode') ORDER BY FIELD (p.Name, '$item_implode');"); 


while($row = $result->fetch_assoc()) { 

    $product_name = $row['Name']; 
    // find all keys in $item_array which value is the products 
     $keys = array_keys($item_array, $product_name); 
    foreach ($keys as $key) { 

     // add values for these keys 
     $product[$key + 1]["Name"] = $row['Name']; 
     $product[$key + 1]["now_price"] = $row['now_price'];// 
     $product[$key + 1]["was_price"] = $row['was_price']; 
     $product[$key + 1]["delta"] = $row['now_price']-$row['was_price'];  
     $product[$key + 1]["delta_percent"]= $row['delta']/$row['was_price']; 


    } 
} 

// Manual definition: 

$product[1]["delta"]=$product[1]["now_price"]-$product[1]["was_price"]; 
$product[1]["delta_percent"]= $product[1]["delta"]/$product[1]["was_price"]; 


?> 
<body> 
<?php $i = 1; while ($i <= 2) { ?> 
<ul class="listab"> 
        <li>#: <?= $i ?></li> 
        <li>Now: <?= $product[$i]["now_price"] ?></li> 
        <li>Was: <?= $product[$i]["was_price"] ?></li> 
        <li>Diff: <?= $product[$i]["delta"] ?></li> 
        <li>Per: <?= $product[$i]["delta_percent"] ?></li> 
       </ul> 
<?php $i = $i + 1; } ?> 
</body> 
</html> 

輸出:

#: 1 
Now: 306.99 
Was: 369.99 
Diff: -63 
Per: -0.170274872294 

#: 2 
Now: 306.99 
Was: 369.99 
Diff: -63 
Per: 0 

回答

1

你在這一行錯誤:

$product[$key + 1]["delta_percent"]= $row['delta']/$row['was_price']; 

有沒有$row['delta']。前面的聲明計算了三角洲,它把它放在$product[$key+1]["delta"]。所以這應該是:

$product[$key + 1]["delta_percent"]= $product[$key+1]["delta"]/$row['was_price']; 

順便說一句,這不是一個百分比,這是一個比例。爲了得到一個百分比,您必須通過100

乘你也可以計算在SQL三角洲和口糧。

$result = $mysqli->query(" 
    SELECT p.Name, p.now_price, h.was_price, 
     p.now_price - h.was_price as delta, (p.now_price-h.was_price)/h.was_price AS delta_percent 
    FROM table1 p 
    LEFT JOIN table2 h ON p.ProductId = h.ProductId 
    WHERE p.Name IN ('$item_implode') 
    ORDER BY FIELD (p.Name, '$item_implode');"); 
+0

謝謝。也許有一些更好的方法來計算從蝙蝠的百分比差異? – rockyraw

+0

我已經展示瞭如何在SQL中完成它。 – Barmar