Php 如何消除SQL联接中的重复项?
我正在为我的大学用php做一个基于web的应用程序,我需要显示有多少学生在同一时间学习某些课程,这样他们就可以避免时间安排冲突 这是我的模式: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
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