2012-11-08 2 views
1

현재 12 개의 테이블이있는 데이터베이스가 있습니다. 데이터베이스에서 정보를 가져 오기 위해 PHP 쿼리를 수행하고 있지만 아무것도 표시되지 않습니다. 쿼리만으로 외래 키와 관련된 테이블 schedule으로 시작하는 모든 테이블을 브리지합니다. 테이블 class에서 쿼리를 시작하고 다른 테이블과 브리지를 시작해야합니까?여러 테이블에서 결과 표시 SQL/PHP

TABLE DESIGN- PICTURE

내 인 디자인을 QUERY

$query = ("SELECT class_name, class_caption, class_credit_hours, class_description 
       FROM schedule 
       INNER JOIN section 
       ON class.id = section.class_id 
       INNER JOIN faculty 
       ON faculty.id = section.faculty_id 
       INNER JOIN faculty 
       ON faculty.id = office_hours.faculty_id 
       INNER JOIN faculty_titles 
       ON faculty_titles.faculty_id = faculty.id 
       INNER JOIN faculty_education 
       ON faculty_education.faculty_id = faculty.id 
       INNER JOIN section 
       ON section.faculty_id = faculty.id 
       INNER JOIN class 
       ON class.id = section.class_id 
       INNER JOIN major_class_br 
       ON major_class_br.class_id = class.id 
       INNER JOIN major_minor 
       ON major_class_br.major_minor_id = major_minor.id     
       "); 
     //execute query 
     $result = mysql_query($query); 

    if ($result){ 

    $totalhours = 0; 

    while ($row = mysql_fetch_assoc($result)) 
    { 
     print "<b>" . $row['class_name'] . "</b><br>"; 
     print $row['class_caption'] . "<br>"; 
     print $row['class_description'] . "<br>"; 
     print $row ['class_credit_hours'] . "hrs. <br>"; 
     print "------------------------------<br />"; 
     $totalhours += $row['class_credit_hours']; 
    } 
    } 

SQL fiddle query

+0

그런 행 중 하나가 존재하지 않을 수 있습니까? 외래 키가 널 (NULL) 입력 가능한지 여부와 내부 조인 대신 실제로 LEFT JOIN을 실제로 사용해야하는지 확인하십시오. –

+0

@ charliecodex23 쿼리 파일에 테이블이 누락되었습니다. SQL 피 들러 링크에서 그것을 수정하고 거기서'build schema'를 클릭하고 알려주십시오. –

답변

2
SELECT class_name, class_caption, class_credit_hours, class_description 
      FROM schedule 
      INNER JOIN section 
      ON class.id = section.class_id 

바로 여기에 문제가있어 중복 싶은 경우에 : 당신은 INNER이 필드를 사용하여 가입하고있는 '클래스를 .id '하지만'class '테이블이 JOIN의 양쪽에 없습니다. 그래서 작동하지 않습니다.

을 그리고 다음은 일반적인 인덱스 (나는 그것이 클래스가 될 것 같아요) 공유 테이블과 테이블 '일정'에 가입 않습니다

쿼리는 다음과 같이 시작해야합니다.

SELECT class.class_name, class.class_caption, class.class_credit_hours, class.class_description 
      FROM class 
      INNER JOIN section 
      ON class.id = section.class_id 
      INNER JOIN faculty 
      ON faculty.id = section.faculty_id OR faculty.id = office_hours.faculty_id 
      INNER JOIN faculty_titles 
      ON faculty_titles.faculty_id = faculty.id 
      INNER JOIN faculty_education 
      ON faculty_education.faculty_id = faculty.id 
      INNER JOIN major_class_br 
      ON major_class_br.class_id = class.id 
      INNER JOIN major_minor 
      ON major_class_br.major_minor_id = major_minor.id 
      INNER JOIN sched_sect_br 
      ON sched_sect_br.section_id = section.id 
      INNER JOIN schedule 
      ON schedule.id = sched_sect_br.schedule_id 
      INNER JOIN semester 
      ON semester.id = schedule.semester_id 
      INNER JOIN office_hours 
      ON schedule.id = office_hours.schedule_id AND faculty.id = office_hours.faculty_id 

이 쿼리가 다른 어떤 관련이 없습니다, 이벤트 테이블을 제외하고, 당신이 당신의 그래프에있는 모든 테이블에서 정보를 가져옵니다

전체 쿼리는 다음과 같이해야한다. 하지만 여전히이 쿼리는 SELECT에 더 많은 필드를 가져야합니다 (클래스 테이블의 선택 필드 일뿐입니다. 다른 10 개의 테이블에서도 데이터를 원할 것입니다). 'tablename.field'를 SELECT의 필드 목록.

+0

+1 감사합니다. 정확하게 정확한 쿼리를 표시 할 수 있습니까? 나는 당신의 대답을 받아 들일 것입니다. – techAddict82

+1

확실히 제발 초와 내가 그것을 얻을거야. 그런데 SELECT의 필드는 임시적이며 실제로 JOIN을 사용하여 추가하는 테이블에서 정보를 검색하려고합니다. 내 말은, 클래스 테이블에서 정보를 검색하는 쿼리를 보는 것은 이상한 일이며 너무 많은 JOIN이 있지만 다른 테이블을 포함하는 하나의 WHERE 절이 아니라는 것을 의미합니다. – Naryl

+0

+1 당신이 전적으로'SELECT'에있는 필드는 임시적이며 다른 것들을 검색 할 것입니다. 고맙습니다! – techAddict82

관련 문제