Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 有没有其他方法可以提取考试次数?_Php_Sql_Database_Oracle_Phpmyadmin - Fatal编程技术网

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_appoge
NUM\u模块
如何修复此@bob将
(@NUM\u考试:=@NUM\u考试+1)作为NUM\u考试
并查看是否得到它。您可以尝试问另一个问题,并包括测试数据和预期结果,以便发布答案的人可以验证他们的查询是否提供了您预期的结果。谢谢