2013-05-12 3 views
2

문제가 있습니다.PHP - 누락 된 항목을 말하십시오

나는 세 테이블 class_tbl, subject_tbl 및 * student_tbl이 있습니다. class_tbl에는 "class_id, subject_id 및 student_id"라는 3 개의 열이 있습니다. * subject_tbl에는 4 개의 열 * "subject_id, subject_name, subject_yr, subject_sem"이 있고 * student_tbl에는 마지막에 student_id 및 student_name의 두 열이 있습니다. 이러한 행이 있습니다

**[class_id || subject_id || student_id]** 

|| 1001 || 2002 || 3003 

|| 1002 || 2003 || 3003 

|| 1003 || 2004 || 3003 

subject_tbl 5 개 행이 :

**[subject_id || subject_name || subject_yr || subject_sem]** 

|| 2002  || Math  || 2010 || 1st 

|| 2003  || Science  || 2010 || 1st 

|| 2004  || History  || 2010 || 1st 

|| 2005  ||  PE  || 2010 || 1st 

|| 2006  || Social Studies || 2010 || 1st 

student_tbl 1 개 행이 : 실제로 학생

의 수에 따라

여기서 목표는 PE와 사회 연구 인 마지막 두 과목을 에코하여 class_tbl에 삽입 할 수 있다는 것입니다. 에코는 그 학기와 학년도 동안 2 과목에 2 개의 항목이 없다고 말하고 있습니다. 이 쿼리는 이미 수학, 과학 및 역사 인 class_tbl의 항목에있는 과목을 반향하지 않습니다. 해당 학기와 연도의 누락 된 과목을 쿼리하고 에코하려면 어떻게합니까? 나는 정말로 어떤 아이디어라도 내놓을 수 없다. 도와주세요 tnx!

여기 코드는 해당 school_yr 및 학기의 모든 과목을 표시합니다.

  if (isset ($db1)&&$db1!=""){ 


      } 

      <?php 

       $student_id = $_POST['student_id']; 
       $sem = $_POST['sem']; 
       $yr = $_POST['yr']; 

       $list = mysql_query("SELECT * 
            FROM 
            class_tbl 
            LEFT JOIN 
            subject_tbl 
            ON 
            class_tbl.subject_id = subject_tbl.subject ID 
            WHERE 
            student_id = '$student_id' 
            OR 
            subject_sem = '$sem' 
            OR 
            subject_yr = '$yr' 
            ORDER BY 
            subject_id asc"); 

       while($row_list=mysql_fetch_assoc($list)) 
       { 
       echo $row_list['subject_id']; 

       if($row_list['subject_id']==$db1){echo "selected"; } 

       echo $row_list['subject_name']; 

       } 

예제 출력은 다음과 같습니다

당신이 개없는 과목이 "PE와 사회를."

+0

이 좀 더 사람이 읽을 수있는 (예를 들어 일을 굵게 또는 기울임) 구조하시기 바랍니다 – kelunik

+0

당신이 HTTP를 사용한 경우 : // sqlfiddle .com /, 그러면 당신이 쉬울 것입니다. –

답변

4
SELECT a.* 
FROM subject_tbl a 
     LEFT JOIN class_tbl b 
      ON a.subject_ID = b.subject_ID AND 
       a.subject_yr = 2010 AND 
       a.subject_sem = '1st' AND 
       b.student_ID = 3003 
WHERE b.subject_ID IS NULL 

OUTPUT

╔════════════╦════════════════╦════════════╦═════════════╗ 
║ SUBJECT_ID ║ SUBJECT_NAME ║ SUBJECT_YR ║ SUBJECT_SEM ║ 
╠════════════╬════════════════╬════════════╬═════════════╣ 
║  2005 ║ PE    ║  2010 ║ 1st   ║ 
║  2006 ║ Social Studies ║  2010 ║ 1st   ║ 
╚════════════╩════════════════╩════════════╩═════════════╝ 
+0

많은 tnx에서 u ... 마지막 질문. 괜찮 으면, "a. *"는 SELECT이고 class_tbl "b"는 무엇을 의미합니까? 그들은 테이블이라고 생각하고 있니? Sory ... – reggel

+0

'a와 b'는 테이블'subject_tbl'와'class_tbl'의 별칭입니다. 'a. * '는'subject_tbl' 테이블에서 모든 열을 선택한다는 의미입니다. –

+0

wow tnx mate, 전 테이블에 별칭을 사용하지 않았습니다 ... – reggel

관련 문제