2013-02-17 120 views
0

我有一个orders表具有以下的列:分组SQL查询的用户ID

-userid 
-orderid (primary key) 
-date 
-name 
-qty 

所以我想每一个用户ID下的一个摘要表中显示的所有订单,并将它们组合。因此,它会像

Userid: 0001 
| Orderid | Name | QTY | 
| 1001 | Item A | 10 | 
| 1002 | Item B | 5 | 

Userid: 0003 
| Orderid | Name | QTY | 
| 1003 | Item C | 6 | 
| 1004 | Item C | 7 | 

到目前为止,我已经试验并得到了:在一个表中的用户ID

  • 带GROUP BY订购用户ID的所有项目,我已经

    1. 显示设法创建尽可能多的表,因为有不同的用户ID

    但我似乎无法将这两个结合到所需的结果,真的很感谢一些建议,我做错了什么。

    在此先感谢,希望我的解释有意义!

  • +1

    的'GROUP BY'条款是不需要在这里。您只会执行'SELECT UserID,Orderid,Name,QTY FROM orders',查询结果将在应用程序级别进行格式化。 – 2013-02-17 11:30:13

    +0

    但是,这给了我所有userid订单的列表。我想将用户标识下的每一行分组,并将它们显示在表格中。项目B - 5' '0003 - 1003 - 项目C-6' '0003 - 1004 - 项目C - 与项目B相似,而不是具有以下4行:项目A - 10'012 - - - 1001 - 项目B - 7' 我想将它们分组在2个表格中,比如userid 0001有2个项目,userid 0003有2个项目等等 – Cuppy 2013-02-17 13:05:45

    回答

    1

    我想你会需要

    select * from orders order by userid, orderid 
    

    做到这一点在PHP

    查询在PHP这样的事情psudo代码

    $this_user_id=0; 
    
    for (each order line) 
    { 
    get fields from db result; 
    if ($this_user_id!=$userid) 
    { 
    $this_user_id=$orderid// save change of userid flag 
    print user heading; 
    } 
    
    print order lines; 
    } 
    
    +0

    借口格式化代码! – KevInSol 2013-02-17 11:51:22

    +0

    谢谢!我不太明白这是如何工作的,但我正在试验你给我的东西:) – Cuppy 2013-02-17 13:10:56

    +0

    mysql结果集的每一行都将包含userid,orderid,item&qty。所以只需在for循环中正常循环,但只为每个结果行打印orderid,item和qty。但是,在你这样做之前,看看你是否找到了一个新的用户标识符,并打印出用户标题,$ this_user_id将标记用户标识符的变化,这就是为什么它在循环前设置为零的原因 – KevInSol 2013-02-17 13:25:02