每周从多个表中获取唯一数据

Get unique data from multiple tables week by week

我很难处理多个 table。我想从每周下达的所有订单中获取产品总数。 我使用了以下代码:

$sql = "SELECT  id_order, order_placed FROM orders                      
        WHERE YEAR(order_placed) = YEAR(NOW()) 
        AND WEEKOFYEAR(order_placed) = WEEKOFYEAR(NOW())";

以上查询将 return 本周下达的所有订单。然后我添加了一个新的 sql 查询以从检索到的 ID 订单中获取所有产品 ID。

$sql2 = "SELECT id_product, COUNT(id_product) AS num_products 
         FROM order_product 
         WHERE id_order = '".$id_order."'";
$results2 = Db::getInstance()->ExecuteS($sql2);

我以同样的方式获取其余信息。当我打印最终声明时,它会像:

Order ID: 1, Date: 06/07/2015, Product: 100052, Name: Example A
Order ID: 1, Date: 06/07/2015, Product: 100052, Name: Example A
Order ID: 2, Date: 07/07/2015, Product: 9987,   Name: Example B

但是我想找到一种显示总数的方法:

Order ID: 1, Date: 06/07/2015, Product: 100052, Name: Example A, Count: 2
Order ID: 2, Date: 07/07/2015, Product: 9987,   Name: Example B, Count: 1

此外,我将按周对它们进行分组,这样每一行都将只包含本周的信息。

你可以看到下面的 table 来获得一个想法(为了让你更容易,我将它们简化了很多)

订单

-----------------------------------
| Order ID |  Date                 |
-----------------------------------
| 1        |  06/07/2015 15:20:01  |
-----------------------------------
| 2        |  07/07/2015 10:10:41  |
-----------------------------------

ORDER_PRODUCTS

    ------------------------------------------
    | Order ID |  Product ID  | Product Type |
    ------------------------------------------
    | 1        |  10052       |  1           |
    ------------------------------------------
    | 1        |  10052       |  1           |
    ------------------------------------------
    | 2        |  9987        |  0           |
    ------------------------------------------

客户可以订购任意数量的产品。这就是为什么上面的 table 包含两次 10052 ID。例如,该客户两次订购 10052。 另外,我只想检索类型“1”。

PRODUCT_ID_NAME

------------------------
| Product ID | ID Name |
------------------------
| 10052      |  1      |
------------------------
| 9987       |  2      |
------------------------

产品名称

--------------------------
| ID Name | Product Name |
--------------------------
| 1       |  Example_A   |
--------------------------
| 2       |  Example_B   |
--------------------------

谁能帮我解决这个问题? 目标是显示每周售出的产品数量。

Week 1: Example A sold: 150, Example B sold: 15
Week 2: Example A sold: 100, Example B sold: 50
etc

GROUP_BY 是你的朋友。

我不确定您的 table 或列名称,但这应该可以帮助您:

SELECT o.order_id, o.order_placed, op.product_id, pn.product_name, COUNT(op.order_id) AS `count` 
FROM `orders` o
INNER JOIN `order_products` op ON op.order_id = o.id
INNER JOIN `product_id_name` pin ON pin.product_id = op.product_id
INNER JOIN `product_name` pn ON pn.id_name = pin.id_name

WHERE YEAR(o.order_placed) = YEAR(NOW()) 
AND WEEKOFYEAR(o.order_placed) = WEEKOFYEAR(NOW())
GROUP BY op.order_id

[edit] Ak,这会让你到达

Order ID: 1, Date: 06/07/2015, Product: 100052, Name: Example A, Count: 2 Order ID: 2, Date: 07/07/2015, Product: 9987, Name: Example B, Count: 1

我没有看到有关按产品对它们进行分组的内容 - 但那更像是一回事。只需按产品 ID 而不是订单 ID 分组。