Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.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 如何消除SQL联接中的重复项?_Php_Sql - Fatal编程技术网

Php 如何消除SQL联接中的重复项?

Php 如何消除SQL联接中的重复项?,php,sql,Php,Sql,我正在为我的大学用php做一个基于web的应用程序,我需要显示有多少学生在同一时间学习某些课程,这样他们就可以避免时间安排冲突 这是我的模式: studentID course grade program 324532 csc232 0 computer science 我使用的是php,这是SQL查询。我把分数定为0,因为他/她现在正在上课 $result = mysql_query("SELECT s1.course AS c1 , s2.course

我正在为我的大学用php做一个基于web的应用程序,我需要显示有多少学生在同一时间学习某些课程,这样他们就可以避免时间安排冲突

这是我的模式:

studentID   course   grade   program
324532      csc232   0       computer science
我使用的是php,这是SQL查询。我把分数定为0,因为他/她现在正在上课

$result = mysql_query("SELECT s1.course AS c1 , s2.course AS c2 ,count(*) AS count 
FROM student s1 ,student s2  
WHERE  s1.studentID = s2.studentID 
AND s1.course!=s2.course AND s1.grade='0' AND s2.grade='0' GROUP BY s1.course,s2.course");
我得到的答案是这样的:

cscs321   csci322      6 // there is 6 students taking this two courses together
csci321   csci113      4 // there is 4 students taking these two subjects together 
问题是我得到了一些重复的结果。例如,csci321、csc322 与csci322和csci321相同


如何避免这种重复?

你应该使用
SUM
而不是
COUNT
,因为你想要的是学生的总数而不是计数。

你应该使用
SUM
而不是
COUNT
,因为你想要的是学生的总数而不是计数。

你可以试试这个:

SELECT
    s1.course AS c1,
    s2.course AS c2,
    count(s2.studentID) AS count
FROM student s1 
JOIN student s2 ON (
    s1.studentID = s2.studentID 
    AND s1.course<s2.course  -- <-- this line is important
    AND s1.grade='0' 
    AND s2.grade='0'
    )
GROUP BY
    s1.course,
    s2.course;


都被认为是相同的,因为您可以尝试以下方法:

SELECT
    s1.course AS c1,
    s2.course AS c2,
    count(s2.studentID) AS count
FROM student s1 
JOIN student s2 ON (
    s1.studentID = s2.studentID 
    AND s1.course<s2.course  -- <-- this line is important
    AND s1.grade='0' 
    AND s2.grade='0'
    )
GROUP BY
    s1.course,
    s2.course;


都被认为是相同的,因为
csc233

-1:除非您看到我没有看到的东西,否则该表中没有任何字段可以求和;只有grade和studentID是数字,求和是毫无意义的。-1:除非你看到我没有看到的东西,否则表中没有任何字段可以求和;只有grade和studentID是数字,求和是毫无意义的。我想知道为什么要使用外部联接:我看不出在结果集中使用NULL有什么帮助。谢谢你,但是我有其他科目的成绩是0,所以结果是课程的成绩超过了0例如我得到了csci103 1(实际上,这个分数是70分)你能解释一下吗?我得到的结果是这样的:CSCI 103 1 CSCI 104 1 CSCI 114 1 CSCI 121 1 CSCI 124 1 CSCI 204 1 CSCI 212 CSCI 321 3 CSCI 212 CSCI 323 2 CSCI 213 1 CSCI 214 1 CSCI 215 1 CSCI 222 1 CSCI 321 2 CSCI 321 CSCI 323 2 iact201 2这些课程只有一列我不知道neeed@onedaywhen,你完全正确。外部连接是unn必要的是,这只是出于习惯:-)@user1092661:我更改了语句(将
左连接
替换为
连接
)。现在它应该只返回不带Null的行我想知道为什么要使用外部联接:我看不出在结果集中有Null有什么帮助。谢谢你,但是我有其他科目的成绩是0,所以结果有成绩超过0的课程,例如我得到了csci103 1(实际上这个成绩是70分)你能解释一下吗?我得到的结果是这样的:CSCI 103 1 CSCI 104 1 CSCI 114 1 CSCI 121 1 CSCI 124 1 CSCI 204 1 CSCI 212 CSCI 321 3 CSCI 212 CSCI 323 2 CSCI 213 1 CSCI 214 1 CSCI 215 1 CSCI 222 1 CSCI 321 2 CSCI 321 CSCI 323 2 iact201 2这些课程只有一列我不知道neeed@onedaywhen,你完全正确。外部连接是不必要的,只是出于习惯:-@user1092661:I更改了语句(将
左连接
替换为
连接
)。现在它应该只返回不带null的行
csc322, csci321