Php 有没有其他方法可以提取考试次数?
大家好,我有一个问题,我需要帮助,我正在努力获得指定学生的考试编号 我们有三张桌子:Php 有没有其他方法可以提取考试次数?,php,sql,database,oracle,phpmyadmin,Php,Sql,Database,Oracle,Phpmyadmin,大家好,我有一个问题,我需要帮助,我正在努力获得指定学生的考试编号 我们有三张桌子: etudient (N_Appoge,Nom,PRENOM,filiere,....) module (NUM_Module,Nom_module,Nom_semestre) Inscrit (N_Appoge,NUM_Module) // this table is the relation between etudiant & module 所以基本上,同一个班级的学生意味着他们有相同的课程
etudient (N_Appoge,Nom,PRENOM,filiere,....)
module (NUM_Module,Nom_module,Nom_semestre)
Inscrit (N_Appoge,NUM_Module) // this table is the relation between etudiant & module
所以基本上,同一个班级的学生意味着他们有相同的课程和相同的名字
我尝试了以下查询:
set @num_exam=0;
SELECT DISTINCT N_APPOGE, NOM, PRENOM, filiere,Nom_semestre,
(@num_exam:=@num_exam+1) as num_exam FROM etudiant,
module
WHERE
filiere in (SELECT filiere FROM etudiant WHERE N_APPOGE='1610065' )
And
Nom_semestre In
(SELECT Nom_semestre from module WHERE Nom_semestre='s1'
and NUM_module in (SELECT NUM_module from inscrit where N_APPOGE='1610065'))
ORDER by NOM;
但结果与我预期的不一样,它显示了同一个学生的两个结果,分别为N_APPOGE='1610065'
,其他学生的多个结果
在这种情况下,似乎DISTINCT不起作用这里的解决方案是什么?您在
etudiant
和模块
之间有一个连接,但是在WHERE
子句中,没有任何内容指定这两个表的关联方式。因此,数据库正在执行交叉联接(第一个表中的每一行都联接到第二个表中的每一行)。显然,您需要将表inscrit
包括在内:
SELECT DISTINCT e.N_APPOGE,
e.NOM,
e.PRENOM,
e.filiere,
m.Nom_semestre,
(@num_exam:=@num_exam+1) as num_exam
FROM etudiant e
INNER JOIN inscrit i
ON i.N_Appoge = e.N_Appoge
INNER JOIN module m
ON m.NUM_Module = i.NUM_Module
WHERE e.filiere in (SELECT filiere
FROM etudiant
WHERE N_APPOGE='1610065') And
m.Nom_semestre In (SELECT Nom_semestre
from module
WHERE Nom_semestre='s1' and
NUM_module in (SELECT NUM_module
from inscrit
where N_APPOGE='1610065'))
ORDER by NOM
希望这会有所帮助。这不是Oracle代码。请使用您真正使用的数据库进行标记。欢迎使用堆栈溢出。如果没有测试数据,很难确定建议的答案是否正确。请编辑您的问题(使用标签下方的
edit
按钮),并包含问题中所有表格的数据样本,以便重现问题。谢谢。非常感谢您的回答,查询工作得很好,但是如果我想选择Num_考试(例如N_appoge=1610065的学生)并使用Php显示结果,该怎么办?我对Php一无所知,因此无法为您解决这个问题。你最好问另一个问题。谢谢你,老兄,我找到了解决这个问题的办法。非常尊敬你,但是这个查询仍然存在一个问题,直到今天我才注意到,它仍然给出重复的名字,例如,具有N_appoge=1610065
的学生,它重复了几次或更多次,这取决于表inscrit
,因为我们可以在inscrit中找到具有不同名称的相同N_appogeNUM\u模块
如何修复此@bob将(@NUM\u考试:=@NUM\u考试+1)作为NUM\u考试
并查看是否得到它。您可以尝试问另一个问题,并包括测试数据和预期结果,以便发布答案的人可以验证他们的查询是否提供了您预期的结果。谢谢