每周从多个表中获取唯一数据
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 分组。
我很难处理多个 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 分组。