我正在为我的大学在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相同。
我怎样才能避免这种重复?
答案 0 :(得分:3)
你可以尝试这个:
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;
这个想法是每行“排序”课程,以便
csci321, csc322
和
csc322, csci321
被认为是相同的,因为csc233 < csci321
答案 1 :(得分:-2)
您应该使用SUM
代替COUNT
,因为您需要学生总数而不是计数。