Php 数据库中的多连接

Php 数据库中的多连接,php,mysql,database-design,join,Php,Mysql,Database Design,Join,这种情况很难解释,但我会尽力的 对于学校来说,我们必须创建一个web应用程序(用PHP编写),允许教师管理学生的项目,并允许他们进行同行评估。由于学生人数众多,每个项目都有多个项目组(当然,您应该只对自己的小组成员进行同行评估) 目前,我的数据库结构如下所示: 表用户:包含所有用户信息(用户id为主) 表:项目:包含项目id、名称、说明和开始日期 到目前为止,这很容易。但现在变得更加困难了 表组:包含组id和组名,由于组是特定于项目的,因此它还包含项目id。 表groupmembers:一个组包

这种情况很难解释,但我会尽力的

对于学校来说,我们必须创建一个web应用程序(用PHP编写),允许教师管理学生的项目,并允许他们进行同行评估。由于学生人数众多,每个项目都有多个项目组(当然,您应该只对自己的小组成员进行同行评估)

目前,我的数据库结构如下所示:

用户:包含所有用户信息(用户id为主)
表:项目:包含项目id、名称、说明和开始日期

到目前为止,这很容易。但现在变得更加困难了

:包含组id和组名,由于组是特定于项目的,因此它还包含项目id。
groupmembers:一个组包含多个用户,但用户可以在多个组中(因为他们可以在多个项目中处于活动状态)。所以这个表包含一个用户id和一个组id来链接这些

最后,管理员可以决定用户何时需要进行同行评估,以及他们有多少时间进行评估。因此,最后一个表evaluations包含评估id、开始和结束日期以及项目id(实际评估存储在第六个表中,目前不相关)

我认为这是一个很好的设计,但当我不得不使用这些数据时,它会变得更加困难。我想展示一份你仍然需要填写的评估清单。您只知道您的用户id,因为它存储在会话中

因此必须这样做:
1) 对groupmembers运行查询,查看用户所在的组。
2) 根据此结果,对组运行查询,查看这些组与哪些项目相关。
3) 现在我们知道了用户所处的项目,应该查询评估表,查看是否有此项目的持续评估。
4) 我们现在知道哪些评估是可用的,但是现在我们还需要检查第六个表,看看用户是否已经完成了这个评估

所有这些步骤都依赖于彼此的结果,因此它们都应该包含自己的错误处理。一旦用户选择了他们希望填写的评估(evaluationID将通过GET发送),就必须运行大量新的查询,以检查该成员在其组中拥有哪些用户,并且必须进行评估,并再次检查哪些其他组成员已经过评估)

如你所见,这是相当复杂的。包括所有的错误处理,我的脚本将是一团混乱。有人告诉我,在这种情况下,“视图”可能会有所帮助,但我真的不明白为什么这对我有帮助

有什么好办法吗


多谢各位

你的思维太程序化了

所有条件都应该轻松地输入到sql语句的一个where子句中


您将得到一个要评估的项目列表。只有一个列表,只有一组错误处理。

不确定这是否完全正确,但请尝试这种基本方法。我没有在实际的数据库上运行它,所以语法可能需要调整

select p.project_name
from projects p inner join evaluations e on p.project_id = e.project_id
where p.project_id in (
select project_id 
from projects p inner join groups g on p.project_id = g.project_id
inner join groupmembers gm on gm.group_id = g.group_id
where gm.user_id = $_SESSION['user_id'])

此外,在将用户id作为查询的一部分时,您还需要确保正确转义用户id,但这是一个完全不同的主题。

看起来您对另一个主题有依赖关系。内部连接无法解决问题,请看这篇文章-->感谢您提供的链接,我会看一看。我试着按照我提到的步骤去做,但是它变得非常非常混乱,所以我创建了这个线程。请给我们看看你做的一些尝试。