简体   繁体   English

Mysql子查询太慢,查询销售号

[英]Mysql Subquery too slow, query sale number

I have three table: one: table order_info 我有三个表:一个:表order_info

ordre_id     int
add_time     int

two: table order_goods 二:表order_goods

id           int
goods_id     int
order_id     int
sale_number  int

three: table goods 三:餐桌用品

goods_id     int 
goods_name   varchar

Now I want query goods sale total number and order by this number, and when goods has no sale number, show it with zero. 现在我要查询商品销售总数和订单号,当商品没有销售数字时,将其显示为零。 I use subquery, but it's too slowly, sql is like: 我使用子查询,但是它太慢了,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;

Can you have some goods idea? 你能有一些货主吗? Thanks! 谢谢!

Why not just remove the outer query part and run a 为什么不删除外部查询部分并运行

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 

? What Indices have you set on your tables? 您在桌上设置了哪些指数?

you don't need outer query you can use GROUP BY instead. 您不需要外部查询,可以改用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

if i read your questions, you need total sales all goods. 如果我读了您的问题,则您需要将所有商品全部销售。 try this one : 试试这个:

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

i just confuse with your query actually. 我只是与您的查询混淆。 "goods_number" column comes from where ? “ goods_number”列来自哪里? what is meant is "sale_number" column ? 什么是“ sale_number”列?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM