找到已通过php中的Dropdown在选定主题中注册的学生

时间:2015-02-04 11:10:00

标签: php sql join

StudentID | SubCode | SubName
-------------------------------
   1          1       Math
   1          2       Science
   1          3       English
   2          1       Math
   2          2       Science
   3          2       Science
   4          1       Math
   4          3       English

这是我的主题表。

如何找到已注册的学生

  1. 仅使用英语和科学数学注册的学生
  2. 已注册数学和英语非科学
  3. 的学生
  4. 已注册科学与数学和英语的学生
  5. 在单个SQL查询中。

    我试过这种方式

        SELECT DISTINCT  
        `stud_id` FROM  `subj_assign` 
    WHERE  
       `subj_id` =  '1,2'
       AND STATUS =  '1'
    ORDER BY  
       `subj_assign`.`stud_id` ASC    
    

    AND也尝试这种方式但不工作

       SELECT stud_id FROM subj_assign GROUP BY stud_id 
       HAVING Count(CASE WHEN subj_id = '1' AND 
           status='1' THEN 1 END) = 1 AND  
       Count(CASE WHEN `subj_id` = '2' AND 
           status='1' THEN 1 END) = 1
    

3 个答案:

答案 0 :(得分:2)

它的朗姆酒给了我。也可能对你有所帮助。

SELECT stud_id FROM subj_assign GROUP BY stud_id 
   HAVING Count(CASE WHEN subj_id = '1' AND 
       status='1' THEN 1 END) = 1 AND  
   Count(CASE WHEN `subj_id` = '2' AND 
       status='1' THEN 1 END) = 1

然后与学生的总科目和有条件的过滤科目进行比较

答案 1 :(得分:0)

试试这个: -

SELECT
(SELECT DISTINCT StudentID FROM subject WHERE SubName = 'Math' AND StudentID NOT IN ( SELECT DISTINCT StudentID FROM subject WHERE SubName IN ('English', 'Science')) AS STUD_ONLY_IN_MATHS,
(SELECT DISTINCT StudentID FROM subject WHERE SubName in ('Math', 'English') AND StudentID NOT IN ( SELECT DISTINCT StudentID FROM subject WHERE SubName IN ('Science')) AS STUD_IN_MATHS_AND_ENGLISH,
(SELECT DISTINCT StudentID FROM subject WHERE SubName in ('Math', 'English', 'Science') AS STUD_IN_MATHS_ENGLISH_SCIENCE);

答案 2 :(得分:0)

您可以将表格与StudentID分组的表格连接起来。这样你就可以同时测试行数和子代码。

SELECT DISTINCT tmp.StudentID
FROM subj_assign tmp JOIN (SELECT StudentID, COUNT(*) as total
                           FROM subj_assign
                           GROUP BY StudentID) tmpG on tmp.StudentID = tmpG.StudentID
WHERE (tmp.SubCode = 1 and total = 1) --Only Math
OR (total = 2 and SubCode != 2) --No Science
OR total = 3 --Math, English, Science