【问题标题】:php mysql if sum not workingphp mysql 如果总和不起作用
【发布时间】:2010-07-09 05:25:28
【问题描述】:
trans_id trans_product trans_user trans_date trans_date2 trans_description trans_inventory 13 6 1 1278604284 1278547200 -1000 9 5 1 1278601462 1278547200 新品到货200 11 7 1 1278601743 1278547200 50 12 6 1 1278601756 1278547200 5000
$sql = mysql_query("SELECT *, SUM(IF(trans_inventory>0,trans_inventory,0)) as pos "
                  +"FROM site_trans GROUP BY trans_product") or die(mysql_error());
while($row = mysql_fetch_array($sql)) {
    $amt_p = $row['pos'];
    $sql2 = mysql_query("SELECT *, SUM(IF(trans_inventory<0,trans_inventory,0)) as neg "
                      + "FROM site_trans GROUP BY trans_product") or die(mysql_error());
    while($row2 = mysql_fetch_array($sql2)) {
        $amt_n = $row2['neg'];
    }

    echo $amt_p; //working
    echo $amt_n; // not working
}

第一个 sql 查询正在运行($amt_p),但是第二个是负数不起作用($amt_n)知道我做错了什么吗?

【问题讨论】:

  • 我认为你的while循环是错误的,你真的想要第一个while循环中的第二个sql查询吗?

标签: php mysql


【解决方案1】:

您正在为每个产品覆盖$amt_n。我建议将查询组合成这样的:

$sql = mysql_query("SELECT *, "
                  + "SUM(IF(trans_inventory>0,trans_inventory,0)) as pos, "
                  + "SUM(IF(trans_inventory<0,trans_inventory,0)) as neg "
                  + "FROM site_trans GROUP BY trans_product") or die(mysql_error());
while($row = mysql_fetch_array($sql)) {
    $amt_p = $row['pos'];
    $amt_n = $row['neg'];

    echo $amt_p;
    echo $amt_n;
}

【讨论】:

  • 我不能为答案投票,因为没有足够的声誉。无论如何,马克干得好。它工作得很好。
  • @DeveloperChris,什么?原始查询的意图似乎是按 trans_product 分组的“正”和“负”值,这就是产生的结果。 (更不用说 OP 说这是产生正确的行为)
  • @DeveloperChris:此外,请参阅OP's other post 确认这是正确的。
  • 是的,我的错,OP 实际上在中途改变了他的问题,原来的实际上是对所有记录的正负值求和,而你的答案为每个分组显示不同的结果。当我回复时,我指的是他提供的原始源代码。抱歉推论,您的回答对他重新编写的问题很有效。 (这仍然没有多大意义)。
【解决方案2】:

添加$amt_n = 0进行初始化
$amt_n = $row2['neg']; 更改为$amt_n += $row2['neg'];

问题是你在迭代它时将值归零

你需要对 pos 和 neg 都这样做

直流

【讨论】:

    【解决方案3】:

    不确定为什么它不起作用,但在我看来,您只需要所有正负 trans_inventory 行。你如何在你的第一个查询中添加“where trans_inventory>0”并去掉那个条件 IF hoohah?

    SELECT *, SUM(trans_inventory) as pos 
    FROM site_trans
    WHERE trans_inventory>0
    GROUP BY trans_product
    

    “不工作”到底是什么意思?你得到了什么价值,你期待什么?

    【讨论】:

    • 我得到 0,它在 product_id 6 上应该是 -1000
    猜你喜欢
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多