首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql-php查询列表建表

mysql-php查询列表建表
EN

Stack Overflow用户
提问于 2009-06-15 16:25:06
回答 1查看 121关注 0票数 1

我在sql上遇到同样的问题已经有一段时间了,当我坐下来编写我一直使用的同样的“蛮力”黑客时,我想肯定有一种更有效的方法来做我想做的事情。

我有类似于下面的表格:

代码语言:javascript
复制
grades(gradeID, taskID, grade, username, date)
tasks(taskID, task...)
assignment(assignmentID, title...)
assignment_tasks(assignmentID, taskID)
assignment_students(assignmentID, username)
students(username, forename...)

最后5个表是非常静态的,只需设置一次,而且大部分都是单独设置的。

对于“成绩”表,每次为任务输入新的成绩时都会创建一条新记录。

我想为作业生成一个汇总表,它可能由5个任务组成,每个学生的每个任务可以有任意数量的分数,最近的一个是我想要显示在摘要中的分数。

我通常要做的是查询一个学生列表和一个作业任务列表,然后构建一个巨大的嵌套for循环,遍历每个学生的每个任务,查询每个学生的最新成绩,所以假设有30个学生,5个任务,那就是152个查询,我总是觉得太多了。

我认为(希望)我的sql知识有一个可怕的令人尴尬的差距,有一个更聪明的方法来做到这一点。

编辑:感谢你的回答-我仍在构建实际的数据库,以便可以测试它,但我怀疑下面的答案没有涵盖以下问题:

如果学生没有尝试任务/作业,在成绩表中不会有任何条目,但他们仍然需要在汇总表中显示每个任务的默认成绩("u")。我认为这一点让它变得更加困难。

再次编辑:我现在有了胚胎数据库,它的工作原理是我得到了一个最新的分数列表,其中没有分数。转置该列表现在是another question的主题!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-06-15 16:31:55

代码语言:javascript
复制
SELECT  tasks.*, students.*,
        (
        SELECT  grade
        FROM    grades
        WHERE   grades.task_id = tasks.task_id
                AND grades.username = students.username
        ORDER BY
                date DESC
        LIMIT 1
        ) AS lastgrade
FROM    assignments a
JOIN    assignment_tasks at
ON      at.assignmentID = a.assignmentID
JOIN    assignment_students ast
ON      ast.assignmentID = a.assignmentID
JOIN    tasks
ON      tasks.task_id = at.task_id
JOIN    students
ON      students.username = ast.username
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/997041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档