代码之家  ›  专栏  ›  技术社区  ›  MalphasWats

PHP列表到表中

  •  0
  • MalphasWats  · 技术社区  · 16 年前

    我问了一个 question yesterday 我得到的答案回答了我问题的第一部分——我现在有了一个查询,它生成了一个类似于以下内容的列表:

    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    |  ..    |  ..    |
    ...
    

    同样,我以前也做过类似的事情,但我知道它们效率非常低——理想情况下,我希望能够通过一次数组生成这个表。

    2 回复  |  直到 9 年前
        1
  •  1
  •   Martijn    16 年前

    您需要做的是在遍历行时添加列。首先执行一个小查询,选择列可能比较有效:

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

    然后调整查询,加载您描述的数组以按用户、分配、任务排序。 这样,数组中的值的顺序与表中的顺序相同(逐行、从左到右)。如果某个值丢失(或为空,不重要),请打印U。

    当然,这也符合这样的假设:与数组中的条目数相比,分配和任务的数目是很小的。

        2
  •  1
  •   Nicholas DiPiazza    16 年前

    看看 group by 条款。我个人不使用它,因为我发现我仍然要结束 foreach 遍历结果集以创建一个我想要的嵌套数组-但这可能是您要查找的。这里有一个 link that uses sums 所以这并不理想,但它向您展示了关于SQL的更多信息。