1

我有一个使用 SUM 的脚本,它计算所有订购的物品,因此产品 1 已订购 6 次,产品 2 已订购 9 次。现在在一个单独的表中(我从中获取 orderid)可能有一个奖励代码。如果此奖励代码是产品(从其他表中检查),那么我还需要将其添加到计数中。

解释起来很奇怪。这是我的代码。

$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 和数量等)、产品(包含产品名称)、调度(包含奖励代码)、奖金(包含产品 ID)

样本数据 http://i.imgur.com/lZnba.png

4

2 回答 2

1

也许我错过了复杂性,但听起来您只需要从产品循环中查询您的奖励代码:

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 />";
}
于 2012-11-14T12:36:37.847 回答
0

如果我理解这个问题,您所要做的就是将结果存储在关联数组中。得到结果后:

$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;
    }

最后,只需遍历产品数组即可打印出值

$keys = array_keys($product_array);
foreach($keys as $key)
    {
    echo("$key - $product_array[$key]");
    }
于 2012-11-14T12:40:23.893 回答