2016-12-16 73 views
1

我尝试了一些例子和很多查询,但我无法得到这个工作。 我有这样的方案:sql选择问题(mysql)

TABLE order 
ID |...| WHEN 
1 |...|2016-12-14 
2 |...|2016-12-14 

TABLE item 
ID|...|NAME 
1 |...|Pen 
2 |...|Pencil 
3 |...|Knife 

TABLE order_itens 
ID |...|amount|ID_order|ID_item| 
1 |...|5  |1  |1 
2 |...|2  |1  |2 
3 |...|1  |1  |3 
4 |...|10 |2  |1 
5 |...|2  |2  |2 
6 |...|5  |2  |3 

ID_item是TABLE.item.id的FK; ID_order是TABLE.order.id的FK;

我需要通过'order.whhen < =(某个自定义日期)'来获得所有注册表,并且SUM是每个项目(Pen,Pencil,Knife等)的数量。就像,在12月当月(2016年12月1日至2016年12月31日),我在此数据库登记:

count | NAME 
15 | Pen 
4  | Pencil 
6  | Knife 

我怎样才能实现呢?

+3

刚刚加入所有3个表,添加一个'WHERE'条款的日期,并以'SUM()'和'GROUP BY item.id' 。 – Barmar

+0

你可以发表你曾尝试过吗? –

+0

@Barmar这为我工作。非常感谢!最后的查询是将这个'''SELECT SUM(b.amount)作为count,c.name FROM'order' a,'order_itens' b,'item' c WHERE a.when> = MYDATEHERE和b.id_order = a.id AND b.id_item = c.id GROUP BY c.id; ''' – PMateus

回答

1

这是快速的回答应做什么,我从这个问题的理解,还没有尝试过,但IAM相当确信它会工作,只是检查字段名

Select sum(order_items.amount),item.name 
From order_items 
Inner join item 
On order_items.id_item = item.id 
Inner join order 
On order.id = order_items.id_order 
Where order.when = yourdate 
Group by item.name 
1

在这里你去:

SELECT SUM(order_items.amount) AS "count", item.NAME 
FROM item, `order`, order_item 
WHERE order_item.ID_item = item.ID 
AND `order`.ID = order_item.ID_order 
AND (`order`.when BETWEEN 'start_date' AND 'end_date') 
GROUP BY item.ID; 
1
select sum(order_items.amount),item.name 
from `order_items` 
inner join `item` 
on order_items.id_item = item.id 
inner join `order` 
on order.id = order_items.id_order 
where order.when between 'start_date' and 'end_date' 
group by item.name 

加入三张表。按项目名称分组。给出你的开始日期和结束日期。

1

我能得到这个查询这方面的工作:

SELECT SUM(b.amount) as count,c.name FROM `order` a, `order_itens` b, `item` c WHERE a.when>= MYDATEHERE AND b.id_order=a.id AND b.id_item=c.id GROUP BY c.id;