我正在为我的大学使用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相同。

如何避免这种重复?

===============>>#1 票数: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

===============>>#2 票数:-2

您应该使用SUM而不是COUNT因为您需要的是学生的总数而不是计数。

  ask by user1092661 translate from so

未解决问题?本站智能推荐: