从DB中收集值,组匹配值,对其进行计数并在其他代码中使用

时间:2013-01-05 01:13:56

标签: php mysql

这就是我的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,56,56,56,56,52 或者,为了更容易理解(56,56,56),56,56,52

其次,我如何计算我有多少相同的值?在这种情况下,我有5x56和1x52。我需要在进一步的计算中使用这些计数。

编辑:进一步的计算解释 我需要知道每个product_id有多少,然后运行这样的东西:

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

1 个答案:

答案 0 :(得分: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 56:3121fefbe6043d6fc12e3b3de2c8fc38的3行数据,那么你必须知道生成行的方法。在没有方便的SQL支持的情况下,它们真的很痛苦(这么多,你最好在PHP中用数量选择一行,然后在客户端生成适当数量的行(PHP) )代码)。我将假设这些查询的某些变体将为您提供所需的信息。