2010-06-29 120 views
0

我有以下查询哪些工程很好。我有两个问题......MySQL逻辑帮助

1)我可以删除子查询中的order的内部联接,并将其绑定回主查询?

2)我需要考虑返回到所有生成的值。每件物品的价格只能存储在order_product。我的表结构如下...

为了

id | account_id | price | tax | shipping_price 

order_product

order_id | product_id | vehicle_id | quantity | price 

我需要系统支持每个订单多的RMA ...

order_return

id | status_id | order_id | account_id | timestamp 

order_return_product

return_id | reason_id | product_id | vehicle_id | note | quantity 

此查询生成销售统计,我需要它在项目未因素已返回其....

SELECT 
        SUM(price+shipping_price) AS total_sales, 
        COUNT(id) AS total_orders, 
        AVG(price+shipping_price) AS order_total_average, 
        (SELECT 
          SUM(quantity) 
         FROM `order_product` 
         INNER JOIN `order` ON (
          `order`.id = order_product.order_id AND 
          `order`.created >= '.$startTimestamp.' AND 
          `order`.created <= '.$endTimestamp.' AND 
          `order`.type_id = '.$type->getId().' AND 
          `order`.fraud = 0 
         ) 
        ) AS total_units, 
        SUM(price+shipping_price)/'.$dateDifference['total']['days'].' AS daily_average 
       FROM `order` 
       WHERE created >= '.$startTimestamp.' AND 
       created <= '.$endTimestamp.' AND 
       fraud = 0 AND 
       type_id = '.$type->getId().' 

回答

1

我不很明白你为什么形成了内在联结;你已经在查询ORDER表,所以你可以引用它中的当前行。也许下面会做?

SELECT 
    SUM(price+shipping_price) AS total_sales, 
    COUNT(id) AS total_orders, 
    AVG(price+shipping_price) AS order_total_average, 
    (SELECT 
     SUM(quantity) 
     FROM `order_product` 
     WHERE `order`.id = order_product.order_id) AS total_units, 
    SUM(price+shipping_price)/'.$dateDifference['total']['days'].' AS daily_average 
FROM `order` 
WHERE created >= '.$startTimestamp.' AND 
     created <= '.$endTimestamp.' AND 
     fraud = 0 AND 
     type_id = '.$type->getId().' 

编辑:好点,我忽略了这一点。我建议添加一个子查询来查找返回的总数,然后减去total_units的计算结果,也许沿着以下几行...

SELECT 
SUM(price+shipping_price) AS total_sales, 
COUNT(id) AS total_orders, 
AVG(price+shipping_price) AS order_total_average, 
((SELECT SUM(quantity) 
     FROM `order_product` 
     WHERE `order`.id = order_product.order_id) - 
    (SELECT SUM (quantity) 
     FROM order_return, order_return_product 
     WHERE order_return.order_id = order.order_id AND 
       order_return.id  = order_return_products.return_id)) 
    AS total_units, 
SUM(price+shipping_price)/'.$dateDifference['total']['days'].' AS daily_average 
FROM `order` 
WHERE created >= '.$startTimestamp.' AND 
     created <= '.$endTimestamp.' AND 
     fraud  = 0     AND 
     type_id = '.$type->getId().' 
+0

Doh!好的呼吁:)这有助于,但它仍然不包括回报,我还没有弄清楚如何去做。 – Webnet 2010-06-30 19:35:01