2017-01-04 5 views
0

私はカート内のアイテムを持っており、各アイテムの数量を乗算した後に計算してSUM出荷重量にする必要があります。php mysqlは、指定されたパラメータで計算し、合計し、グループ化します

レッツは言う:これらのpidため

items currently in-cart (pid): 11, 12, 67 
items qty: 2, 5, 1 

テーブル:

enter image description here

PHP関数をMAX出荷を取得するために与えられたpidsによってmerchant_codeによってSUM重量グループの費用:

function get_g_checkout_shipment_fees($pids=array()) 
{ 

    $q = "SELECT 
       merchant_code, 
       MAX(shipping_alt) AS max_g_shipment_cost, 
       SUM(weight) AS sum_g_shipment_weight "; 
    $q .= "FROM products "; 
    $q .= "WHERE pid IN(".implode(", ", $pids).") "; 
    $q .= "GROUP BY merchant_code"; 

    $sql = $mysqli->query($q); 

    if($sql->num_rows > 0){ 
     return $sql; 
    } 
    return false; 
} 

機能上からの出力:私がする必要がある

function get_g_checkout_shipment_fees($pids=array(), $qtys=array()) 
{ 
    ... 
} 

:ここ

enter image description here

は私の質問ですが、私は次のように機能する(数量のを)追加の配列パラメータを渡したいですそれぞれ weight * qtyを掛けて、 SUM出荷重量とGROUP BY merchant_codeを取得してください。

enter image description here

、これは私が望む結果である:でこれを行うことができますどのように

enter image description here

SUM出荷重量を見つける前に、私が説明するように必要な乗算を行う必要があり関数?それは可能ですか?

ご了承ください。

+0

私たちにスクリーンショットを与えてはいません。私たちはSQLのバイブルを与えてください。 –

答えて

1

これを行うための自然な方法は、買い物カゴアイテムを数量とともにテーブルに格納することです。例えば、以下はこの派生テーブルを使用して行います製品/数量対は別のテーブルに格納されているか、ある種のクエリによって生成された場合

SELECT merchant_code, 
     MAX(shipping_alt) AS max_g_shipment_cost, 
     SUM(weight) AS sum_g_shipment_weight, 
     SUM(weight * qty) as sum_weight_qty 
FROM (SELECT 11 as pid, 2 as qty UNION ALL 
     SELECT 12, 5 UNION ALL 
     SELECT 67, 1 
    ) pp JOIN 
    products p 
    ON p.pid = pp.pid 
GROUP BY merchant_code; 

同じ論理が保持するであろう。

+0

これは素晴らしい作品です、ありがとうございました! –

関連する問題