0

これは私のcustomers_basketテーブルがどのように見えるかです:

customers_id | products_id                         | basket_quantity
3            | 56:3121fefbe6043d6fc12e3b3de2c8fc38 | 3
3            | 56:fb4c9278fcfe6225b58c06711a7e62ef | 1
3            | 56:8e334fce09556108f5416e27154b6c27 | 1
3            | 52:f3b9f38e4ddd18035bc04cd264b0f052 | 1

これは私が使用しているクエリです:

$products_in_cart_query = "SELECT products_id FROM customers_basket WHERE customers_id = " . $_SESSION['customer_id'] ."";
$products_in_cart       = $db->Execute($products_in_cart_query);
$products_in_cart_model = $products_in_cart->fields['products_id'];
$products_in_cart_model = substr($products_in_cart_model, 0, strpos($products_in_cart_model, ":"));

私が得る最終結果は56,56,56,52です

まず、最初の行の数量フィールドをどのように使用しますか? 数量が 3 であるため、products_id を 3 回リストする必要があります。したがって、最終結果は次のようになる必要があります。 56,52

2 番目に、同じ値がいくつあるかをどうやって数えますか? この場合、5x56 と 1x52 があります。今後の計算では、これらのカウントを使用する必要があります。

編集:さらに計算を説明すると、私が持っている各product_idの数を知る必要があり、次のようなものを実行する必要があります:

foreach(product_id) {
    $shipping_cost += FIXED_VALUE * basket_qty;
}
4

1 に答える 1

0

バスケットの数量を取得するには、それを選択する必要があります。部分文字列化などの面倒な操作を行うよりも、製品 ID の最初の部分を別の列に格納した方がよいでしょう。

クエリ 1: 2 文字のコードと対応する数量

SELECT SUBSTR(products_id, 1, 2) AS product_code, basket_quantity
  FROM Customers_Basket
 WHERE customers_id = 3;

クエリ 2: 2 文字コードと合計数量

SELECT product_code, SUM(basket_quantity) AS total_quantity
  FROM (SELECT SUBSTR(products_id, 1, 2) AS product_code, basket_quantity
          FROM Customers_Basket
         WHERE customers_id = 3
       )
 GROUP BY product_code;

製品 ID に対して 3 行のデータがどうしても必要な場合は、56:3121fefbe6043d6fc12e3b3de2c8fc38行を生成する方法を知っておく必要があります。便利な SQL サポートがない場合、それらは本当に苦痛です (あまりにも多くの場合、PHP で数量を指定して行を選択し、クライアント側 (PHP ) コード)。これらのクエリのいくつかのバリエーションで、必要な情報が得られると想定しています。

于 2013-01-05T01:59:14.457 に答える