1

私は現在、12のテーブルを持つデータベースを持っています。データベースから情報を取得するためにphpクエリを実行していますが、何も表示されません。scheduleクエリだけで、外部キーが関連付けられているテーブルで始まるすべてのテーブルをブリッジします。テーブルからクエリを開始し、class他のテーブルとブリッジする必要がありますか?

テーブルデザイン-写真

私のデザインを複製したい場合-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フィドルクエリ

4

1 に答える 1

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

ここに問題があります。フィールド「class.id」を使用してINNERJOINを実行していますが、テーブル「class」はJOINのどちらの側にもありません。したがって、機能しません。

クエリは次のように開始する必要があります。

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

次に、共通のインデックスを共有するテーブルでテーブル'schedule'を使用して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からのフィールドのリスト。

于 2012-11-08T11:25:54.483 に答える