簡體   English   中英

多查詢計數sql

[英]multiquery count sql

我有一個使用SUM的腳本來計算所有已訂購的商品,因此產品1已訂購6次,產品2已訂購9次。 現在在一個單獨的表中(從中獲取訂單編號),可能會有一個獎勵代碼。 如果此獎勵代碼是一種產品(從其他表格中檢查過),那么我還需要將其添加到計數中。

解釋很奇怪。 這是我的代碼。

$query = "SELECT productid, SUM(quantity) FROM `order` GROUP BY productid"; 

$result = mysql_query($query) or die(mysql_error());

// Print out result
while($row = mysql_fetch_array($result)){
    $prodname = fetchproductname($row[productid]);
    echo $prodname ." - ". $row['SUM(quantity)'];
    echo "<br />";
}

我需要知道是否可以存儲所有這些結果,然后查詢獎金代碼,獲取商品編號(如果有)並將其添加到總計中。 我嘗試了一些不同的查詢和使用while語句的方法,但都沒有遇到問題。

我正在使用4個表格,訂單(產品ID和數量等),產品(包含產品名稱),發貨(包含獎勵代碼),獎金(包含productid)

樣本數據http://i.imgur.com/lZnba.png

也許我錯過了復雜性,但聽起來您只需要從產品循環中查詢獎勵代碼:

while($row = mysql_fetch_array($result)){
    $prodname = fetchproductname($row[productid]);
    $productCount = $row['SUM(quantity)'];
    // Now query the bonus codes (you can come up with a better query probably, but this gives the idea)
    $sql = "SELECT COUNT(bonus_code) bonus_count FROM dispatch d WHERE EXISTS (SELECT * FROM bonus b WHERE b.code = d.bonus_code AND b.productid = $productId)";
    $bonusresult = mysql_query($sql) or die(mysql_error());
    if ($bonusRow = mysql_fetch_array($bonusresult)) {
        $productCount += $bonusRow['bonus_count'];
    }
    echo $prodname ." - ". $productCount;
    echo "<br />";
}

如果我理解這個問題,您要做的就是將結果存儲在關聯數組中。 得到結果后:

$product_array = array();
foreach($result as $row)
{
    $prodname = fetchproductname($row[productid]);
    $product_array[$prodname] = $row['SUM quantity'];
}

然后以相同的方式遍歷您的Bonus表,並為找到的每個獎金將一個添加到相關數組:

[...]
if(isset($product_array[$bonus_product_name]))
    {
    $product_array[$bonus_product_name] = $product_array[$bonus_product_name] + 1;
    }
else
    {
    $product_array[$bonus_product_name] = 1;
    }

最后,只需遍歷product數組以打印出值

$keys = array_keys($product_array);
foreach($keys as $key)
    {
    echo("$key - $product_array[$key]");
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM