2011-08-11 50 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

    由于以下几个原因,它是*有效的,但是*不好的建议*和*不能满足问题的要求 - 尽管多个表具有相同的列名,但是根本没有连接两个所需的表,选择'*'和提供了一个糟糕的语法,而不是良好的语法。如果一个回答不仅不能回答问题,而且还会教导一个新手可怜的形式,它确实值得赞扬。 –