2015-10-30 68 views
0

我有一個循環遍歷一個表並顯示客戶ID。 它工作正常。在循環的頂部,它將變量設置爲等於客戶ID,然後將其回顯到屏幕。如果表格中有七個項目,它將顯示七個OrderIds。爲什麼我的總和查詢中斷我的循環?

但是,如果我然後嘗試使用該客戶ID來執行sum語句,程序將首次顯示結果,但在第一次迭代之後退出而沒有錯誤,而不是循環,幾乎就像記錄集一樣正在被摧毀。

我完全喪失理解爲什麼。代碼如下。非常感謝提前:

include ("../Connections/PDOConnection.php") 

$Query= " 
SELECT distinct 
    OrderID, 
    CustID, 
    Name 
FROM 
    dbo.JNO_OrderHeader 
WHERE 
    CustID is Not Null 
"; 

$stmt = $pdo->prepare($Query); 

if ($stmt->execute()) { 

    while ($Order=$stmt->fetch(PDO::FETCH_ASSOC)){ 

     $OrderID = $Order['OrderID']; 
     echo "<br>OrderID: " . $OrderID; 


     $Query1 = "SELECT SUM(dbo.JNO_OrderDetail.ExtendedPrice) AS TotalOrderPrice 
        FROM dbo.JNO_OrderDetail 
        WHERE dbo.JNO_OrderDetail.OrderId = :OrderID"; 

     $stmt1 = $pdo->prepare($Query1); 
     $stmt1->bindValue("OrderID", $OrderID); 
     $stmt1->execute(); 
     $OrderTotal=$stmt1->fetch(PDO::FETCH_ASSOC);  

     echo "<br>Totals for order number ". $OrderID .": " . $OrderTotal['TotalOrderPrice']; 
    } 
} 

?> 
+0

您是否顯示PDO錯誤?在前一個返回所有行之前,您無法在同一連接上啓動新的查詢?也許'fetchAll'會有用嗎?嗯,你實際使用的數據庫是什麼?我假設'mysql'。無論如何,這值得檢查? –

+0

http://php.net/manual/en/pdo.error-handling.php –

+0

這完全解釋了它。我需要一個新的連接!謝謝謝謝! –

回答

0

正如人們所說,錯誤是什麼?

一眼就可以重複使用$pdo,試試$pdo1就像您對循環中的其他變量所做的那樣。

無論如何,循環和發佈多個SQL語句並不是最優的。考慮加入並做這樣的事情?

SELECT 
    oh.OrderID, 
    oh.CustID, 
    oh.Name 
    SUM(od.ExtendedPrice) AS TotalOrderPrice 
FROM 
    dbo.JNO_OrderHeader oh 
LEFT JOIN 
    dbo.JNO_OrderDetail od ON od.OrderId = oh.OrderID 
WHERE 
    oh.CustID IS NOT NULL 
GROUP BY 
    oh.OrderID, 
    oh.CustID, 
    oh.Name 
+0

另一個選項是子查詢 - select_columns(從other_table中選擇something_else)作爲first_table'的extra_column。根據數據可能會更快,或更慢! –

+0

當然取決於,但至少在我使用MySQL的經驗中,子查詢幾乎不是更高性能的選項。 – ficuscr