我正在为在线辅导网站设计一个MYSQL数据库
让我们说,我有:
现在,我想在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查询?
我错过了重要的事情吗?我不是数据库设计方面的专家。请帮忙。
答案 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中选择值。