2010-07-09 50 views
0
 
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 New Arrival  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)任何想法什麼即時做錯了什麼?PHP的MySQL如果一筆不工作

+0

我認爲你的while循環是錯誤的,你真的想在第一個while循環內的第二個sql查詢嗎? – DeveloperChris 2010-07-09 05:37:29

回答

2

您將覆蓋每個產品的$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; 
} 
+0

我不能upvote答案,因爲沒有足夠的聲譽。不管怎樣,好工作馬克。它的工作完美。 – damien 2010-07-09 05:40:02

+0

這是錯誤的,將導致錯誤。看到我的回答 – DeveloperChris 2010-07-09 05:48:45

+0

@DeveloperChris,什麼?來自原始查詢的意圖似乎是由trans_product分組的「正面」和「負面」值,這就是它產生的結果。 (更何況OP是說這是產生正確的行爲) – 2010-07-09 05:52:25

0

不知道爲什麼它不起作用,但它在我看來,你只是想要所有的正面和負面的trans_inventory行。您如何將「trans_inventory> 0」添加到您的第一個查詢中並擺脫該條件IF hoohah?

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

你究竟是什麼意思的「不工作」?你得到了什麼樣的價值,你期待什麼?

+0

我越來越0,它應該是-1000 product_id 6 – damien 2010-07-09 05:32:50

1

添加$amt_n = 0其初始化
變化$amt_n = $row2['neg'];$amt_n += $row2['neg'];

的問題是你迭代它

你需要爲兩個正和負做到這一點時,歸零值

DC