2009-06-16 55 views
0

我问一个question yesterday,我得到的答复已经回答了我的问题的第一部分 - 我现在有一个生成类似于此列表的查询:PHP目录到表

fname, sname, uname, assignment, task, grade 
joe, blogs, joe.blogs, 1, 1, 52 
joe, blogs, joe.blogs, 1, 2, 58 
jim, blogs, jim.blogs, 1, 1, 95 
jim, blogs, jim.blogs, 1, 2, 86 
amy, blogs, amy.blogs, 1, 1, NULL 
amy, blogs, amy.blogs, 1, 2, 76 

的等等。它从列表中取得最近的成绩,并且仍然在学生没有收到任务成绩的情况下工作。

我想接下来就是产生一个表,看起来与此类似:再次

 | Assignment 1 | Assignment 2 | 
Name |-----------------|-----------------| 
     | Task 1 | Task 2 | Task 1 | Task 2 | 
=========================================== 
Joe.. | 52 | 58 | .. | .. | 
Jim.. | 95 | 86 | .. | .. | 
Amy.. | U  | 76 | .. | .. | 
... 

,我以前做过类似的事情,但我知道他们是效率极其低下的 - 在理想情况下,我想能够通过一次数组来产生这张表。

+0

可以假定你的列表/数组将按名称,赋值,任务进行排序,并且所有不存在的值都将返回NULL,ala Amy的Assignment 1 - Task 1赋值? – tschaible 2009-06-16 10:41:01

回答

1

你需要做的是在遍历行时迭代列。这可能是有效的,以第一次执行一个小的查询,选择列:

SELECT 
    * 
FROM assignment_tasks 
ORDER BY 
    Assignment_ID ASC, 
    Task_ID ASC; 

然后适应查询加载您所描述的用户,分配,任务订购阵列。 这样,数组中的值与表中的顺序相同(逐行,从左到右)。如果缺少一个值(或NULL,无关紧要),则打印U.

当然,这与假设分配和任务的数量与数组中的条目数量相比很小。

1

看看group by条款。我个人不使用它,因为我发现我仍然需要结果集foreach来创建一个像我想要的嵌套数组 - 但它可能是你正在寻找的。这里有一个link that uses sums,所以它不是很理想,但它会告诉你更多有关SQL的信息。