2015-03-25 77 views
-1

我有问题想要获取SQL输出。加入两个表并使用where子句对它们进行过滤

我有两个表是这样的:

tblOrder

ID User Status 
1  1   0 
2  1   0 
3  2   1 

tblOrderItem

ID OrderID  Product Quantity 
1  1   A   2 
2  1   B   1 
3  2   A   3 
4  2   B   1 
5  2   C   1 
6  3   A   2 

我希望得到一个输出表在那里我可以看到状态所有订单0并且还可以看到订单中的所有项目,如下所示:

输出

OrderID  User Product  Quantity 
    1   1  A   2 
    1   1  B   1 
    2   1  A   3 
    2   1  B   1 
    2   1  C   1 

所有SQL我已经使用不同版本的INNER JOIN尝试等只得到第一行与每一个订单ID(tblOrder.ID)。我应该如何编写我的SQL查询以获得我想要的结果?

接下来我想用JSON格式的PHP打印输出,用于在另一个设备上运行的C#程序来获得结果。最后,结果应插入类如下:

Public class orderobject 

{ 
    public int OrderID { get; set; } 
    public int UserID { get; set; } 
    public String Product[] { get; set; } // Dont know if correct way to make array this way 
    public int Quantity[] { get; set; } 
} 

结果将最终插入到此类的对象的列表中。因此,列表中的每个条目都是与所有需要的订单数据分开的订单。

我在想我错了,还是我希望我的SQL最好只能获得一个Web请求?我可以在C#代码中将结果重新组织到那里的类中。

+0

在'OrderID'和'ID'上使用'join',然后使用where子句添加'status = 0'的过滤器来获得你想要的结果。至于'C#'类,您应该使用'List '而不是'string []'作为列表提供各种内置操作功能。 – 2015-03-25 13:23:31

+0

我应该如何使用连接?我已经设置了SQL的所有方法,它只返回每行tblOrder.ID一行。 – Kristofer 2015-03-25 13:55:55

回答

0

码的编码器一样,你mentioned应该JOIN这两个表,使用WHERE条款适用O.Status = 0然后用ORDER BY使用ASCDESC基于上升或类似下面降序订购所要求的方式的结果。最好使用List<string>,因为它有搜索,排序和操作列表的方法。

SELECT OI.OrderID, O.User, OI.Product, OI.Quantity 
FROM tblOrder O 
INNER JOIN tblOrderItem OI ON O.ID = OI.OrderID 
WHERE O.Status = 0 
ORDER BY OI.OrderID ASC, OI.Product ASC 
0

我发现我所做的主要问题是写O.ID = OI.ID而不是O.ID = OI.OrderID。这就是为什么我每个ID只有一行。 我应该看到,但我只想到其他问题。谢谢您的帮助!