2016-12-06 115 views
-1

提取信息,我有一個與數據結構像這樣的表:分組SQL語句並通過PHP

TransactionID | saleID | productType | Price 
1    | 1001 | subtotal | 19.50 
2    | 1001 | tax   | 3.11 
3    | 1002 | subtotal | 19.50 
4    | 1002 | tax   | 3.11 

我試圖提取價格字段的值,每場比賽數字,SaleID,和將其納入稅收小計&的PHP變量中。

有什麼想法?

+0

你能添加想要的結果嗎? (格式與現有表格數據相同。) – jarlh

+0

'每個匹配數字的SaleID ......這是什麼意思? –

+0

'由saleID'從select_table組中選擇saleID,SUM(Price)? – bassxzero

回答

0

目前尚不清楚你的實際問題是什麼。如果您知道如何使用PHP中的SQL,您當然知道如何讀取結果,並知道如何將數據添加到數組中。因此,您可以讀取按照saleID排序的表數據並在循環中填充數組。

無論如何,它可以幫助你,讓每一個saleID記錄,而不是:

select saleid, st.price as subtotal_price, t.price as tax_price 
from (select * from transactiontable where producttype = 'subtotal') st 
join (select * from transactiontable where producttype = 'tax') t using (saleid); 

這是標準的SQL。如果您的DBMS不支持USING子句,則必須改爲使用ON

這是你的樣品和查詢結果:

 
TransactionID | saleID | productType | Price 
1    | 1001 | subtotal | 19.50 
2    | 1001 | tax   | 3.11 
3    | 1002 | subtotal | 19.50 
4    | 1002 | tax   | 3.11 

結果:

 
saleid | subtotal_price | tax_price 
1001 | 19.50   | 3.11 
1002 | 19.50   | 3.11 
+0

是的我在PHP數組中使用了上述數據,但我不確定如何通過saleID將其分組。所以我得到了所有的行,但不知道如何匹配saleID上的結果。 –

+0

因此,您不知道如何通過數組循環來彙總小計和每個saleID稅?然後我的查詢應該解決這個問題,因爲你在一個結果行中。正確? –

+0

嗨Thorsten,這是行不通的。它返回價格始終爲19.50的行,但我還需要爲該銷售徵稅。表格結構很奇怪,這使得這個有點棘手。 –

0

對數據進行分組到一個PHP數組我會如下

//$db = mysqli connection 
$sql = "SELECT * FROM transactionTable ORDER BY saleID"; 
$result = $db->query($sql); 
$group = []; 
while ($row = $result->fetch_object()){ 
    if(!isset($group[$row->saleID]){ 
     $group[$row->saleID] = []; 
    } 
    $group[$row->saleID][] = [ 
     'transaction' => $row->transactionID, 
     'productType' => $row->productType, 
     'price' => $row->price 
    ]; 
} 

var_dump($group); 

接近它由此產生的陣列$group將非常容易使用。根據您的使用情況,您可以構建它有點不同。