2014-11-14 71 views
0

我有三個表: 之一:表order_infoMysql的子查詢太慢,查詢銷售數量

ordre_id  int 
add_time  int 

二:表order_goods

id   int 
goods_id  int 
order_id  int 
sale_number int 

三:臺產品

goods_id  int 
goods_name varchar 

現在我想要查詢商品銷售總數和這個數字的訂單,並且當商品沒有銷售數量時,笑用零表示。我使用子查詢,但它太慢,SQL是這樣的:

SELECT t.* 
FROM goods AS tg 
LEFT JOIN (
    SELECT SUM(og.goods_number) AS total_num, g.goods_id, g.goods_name 
    FROM order_info oi 
    LEFT JOIN order_goods AS og  ON oi.order_id=og.order_id 
    LEFT JOIN goods AS g   ON g.goods_id=og.goods_id 
    WHERE oi.add_time>1415635200 
) AS t   ON t.goods_id=tg.goods_id 
ORDER BY t.total_num DESC; 

你可以有一些商品的想法?謝謝!

回答

0

爲什麼不直接去掉外層查詢部分和運行

select 
    SUM(og.goods_number) AS total_num, 
    g.goods_id, 
    g.goods_name 
from 
    order_info oi 
left join order_goods AS og on oi.order_id=og.order_id 
left join goods AS g on g.goods_id=og.goods_id 
right join goods as g2 on g2.goods_id=og.goods_id 
where oi.add_time > 1415635200 

? 你在桌子上設置了什麼指數?

0

您不需要外部查詢 您可以改爲使用GROUP BY

select SUM(og.goods_number) AS total_num, 
     g.goods_id, 
     g.goods_name 
from order_info oi 
left join order_goods AS og 
on oi.order_id=og.order_id 
left join goods AS g 
on g.goods_id=og.goods_id 
where oi.add_time>1415635200 
group by g.goods_id, g.goods_name 
order by total_num desc 
0

如果我看了你的問題,你需要總銷售所有商品。 試試這個:

Select g.goods_id, g.goods_name, IsNull(SUM(og.goods_number), 0) as total_num 
From goods g 
Left Join order_goods og 
    On og.goods_id = g.goods_id 
Left Join order_info oi 
    On oi.order_id = og.order_id 
WHERE oi.add_time>1415635200 
Group By g.goods_id, g.goods_name 
Order By total_num desc 

我只是查詢混淆實際。 「goods_number」列來自哪裏? 是什麼意思是「sale_number」列?