2011-08-11 11 views
0

私はMySQLデータベースの主キーの使用

は私が持っている、のは、言ってみましょうオンライン家庭教師のウェブサイトのためのMySQLデータベースを設計しています:(faculty_id、教員名)と

  • 対象表と

    • 教員テーブル( subject_id、サブジェクト名)(STUDENT_ID、学生名)(CLASS_ID、faculty_id、STUDENT_ID、subject_id)
    • クラステーブルと
    • 学生テーブル

    今、私はすべての学生は、私が持っているため、特定のテーマの下、特定の教員&に登録見つけることclassテーブルの上にSQLクエリを実行したいと思います:

    $sql=("SELECT * 
         FROM class 
         WHERE (faculty_id = '" . mysql_real_escape_string($_POST['faculty_id']) . "') 
         and (subject_id = '" . mysql_real_escape_string($_POST['subject_id']) . "')"); 
    

    しかし、私はできませんfaculty_id、student_id & subject_idの代わりに、学生名、教員名、および科目名を取得する方法を把握しているようです(classテーブルに格納されています)。

    ID番号に基づいてUPDATE、DELETE、およびINSERTクエリを実行できるように、ID番号をそれぞれのテーブルのそれぞれの行に自動的にリンクする、作成する必要があるいくつかのタイプのSCHEMAおよび外部キー関係がありますか?

    ここで重要なことがありますか?私はDB設計の専門家ではない。助けてください。

  • +4

    キャップロックはクールなクルーコントロールです –

    +0

    ニックネームはすべて大文字です!あなたは教科のためのテーブル構造をいくつか教えてください。 – Jacob

    +0

    データをインポートしたい他のテーブルに対してクエリに 'INNER JOIN'節を追加しようとしましたか? – cdhowie

    答えて

    3

    これはあなたのスキーマで起こることではなく、データベースをクエリするときに行うことです。

    関連するテーブルから情報を取得するには、そのテーブルに参加します。

    SELECT 
        class.class_id, 
        student.name AS `student_name`, 
        faculty.name AS `faculty_name`, 
        subject.name AS `subject_name` 
    FROM 
        class 
    INNER JOIN 
        student 
    ON 
        student.student_id = class.student_id 
    INNER JOIN 
        faculty 
    ON 
        faculty.faculty_id = class.faculty_id 
    INNER JOIN 
        subject 
    ON 
        subject.subject_id = class.subject_id 
    WHERE 
        class.faculty_id = ? 
    AND 
        class.subject_id = ? 
    

    あなたは(あなたの例は、それらにスペースを持っていたので、私はそれらのではない本当の名前であると確信している)、彼らが実際にあるものとの任意の列名を交換し、とあなたのPHPコードを配置する必要がありますポスト値? PDOのパラメータ化されたクエリでも読み上げるのに良い時期です。

    0
    $sql=("SELECT * FROM class c, student s WHERE (c.faculty_id = '" . mysql_real_escape_string($_POST['faculty_id']) . "') and (c.subject_id = '" . mysql_real_escape_string($_POST['subject_id']) . "') and s.student_id = c.student_id"); 
    

    また、学生のテーブルから値を選択する必要があります。

    +0

    downvoteへのコメントは素晴らしいでしょう... –

    +0

    合意。これは補償するためにアップアップされたものであり、*これは有効な答えです。クエリは暗黙的な結合を実行します。 – cdhowie

    +0

    複数のテーブルが同じ列名を持っているにもかかわらず、*を選択していても、2つの目的のテーブルに全く参加していないという理由で* *有効ですが*悪いアドバイス*と*良い構文の代わりに貧弱な構文の例を提供します。応答だけでなく、質問に答えるが、初心者の貧しいフォームを教える場合は、実際にdownvoteに値する。 –

    関連する問題