MySQL数据库主键用法

时间:2011-08-11 07:43:03

标签: php mysql schema primary-key

我正在为在线辅导网站设计一个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表中。

我是否需要创建一些类型的SCHEMA和外键关系,它们会自动将ID号链接到相应表中各自的行,这样我就能根据这些ID号运行UPDATE,DELETE和INSERT查询?

我错过了重要的事情吗?我不是数据库设计方面的专家。请帮忙。

2 个答案:

答案 0 :(得分: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代码与post值放在哪里?是...也是阅读PDO参数化查询的好时机。

答案 1 :(得分: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");

您还需要从表student中选择值。