php - mysql-php查询列表建表

标签 php mysql

一段时间以来,我在使用 sql 时遇到了同样的问题,当我坐下来编写我一直使用的相同“暴力破解”技巧时,我认为必须有一种更有效的方法来完成我想做的事情.

我有类似这样的表:

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 的主题!

最佳答案

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

关于php - mysql-php查询列表建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/997041/

相关文章:

PHP preg_match 圣经经文格式

php - WHERE 子句在使用 mdbtools 的 SQL 查询中不起作用

php - 如何使用mysql获取数据计数

mysql - 在一对多关联的 CREATE 期间出现 Sequelize 错误 "Unknown column in ' 字段列表'"

mysql - 加入 Rails 中的多个协会

错误信息

php - mysqli与include(构造)的连接

php - Laravel:安排工作还是 artisan 命令?

javascript - 在jquery中的数组中选中或不选中复选框

mysql - 如何根据该行的字段值选择一行