2011-08-11 51 views
0

我設計了在線輔導網站MYSQL數據庫MySQL數據庫主密鑰使用

比方說,我有:與(faculty_id,教師名)

  • 主題表

    • 教師表( subject_id,主題名稱)
    • 學生表(student_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']) . "')"); 
    

    但是,我不能似乎找出如何檢索學生姓名,教師姓名和科目名稱,而不是僅存儲在class表中的faculty_id,student_id & subject_id。

    是否有某種類型的SCHEMA和外鍵關係需要創建,它將ID號自動鏈接到相應表中的各自行,以便我可以根據這些ID號運行UPDATE,DELETE和INSERT查詢?

    我在這裏錯過了一些重要的東西嗎?我不是數據庫設計方面的專家。請幫忙。

  • +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

    同意。 upvoted補償,因爲這*是一個有效的答案。該查詢將執行隱式聯接。 – cdhowie

    +0

    由於以下幾個原因,它是*有效的,但是*不好的建議*和*不能滿足問題的要求 - 儘管多個表具有相同的列名,但是根本沒有連接兩個所需的表,選擇'*'和提供了一個糟糕的語法,而不是良好的語法。如果一個回答不僅不能回答問題,而且還會教導一個新手可憐的形式,它確實值得讚揚。 –