【问题标题】:MySQL database primary key usageMySQL数据库主键使用
【发布时间】:2011-08-11 07:43:02
【问题描述】:

我正在为在线辅导网站设计一个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']) . "')");

但是,我似乎不知道如何检索学生姓名、教师姓名和学科名称,而不仅仅是存储在 class 表中的教师 ID、学生 ID 和学科 ID。

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

我在这里遗漏了什么重要的东西吗?我不是数据库设计方面的专家。请帮忙。

【问题讨论】:

  • 大写锁定是酷的巡航控制
  • 甚至昵称都是大写!您如何向我们展示一些学科/学院的表结构?
  • 您是否尝试在查询中添加INNER JOIN 子句,以针对您要从中导入数据的其他表?
  • 我在编辑这个问题以删除最后一个大写字母时感觉有点糟糕。对于那些对@Delan 的评论感到困惑的人,请在编辑历史记录中查看该问题的原始版本以获取笑声。
  • 呵呵,我的错..不是想听起来很酷,聪明,响亮或傲慢..只是想强调最后一部分“我是数据库设计的新手,需要帮助”:)

标签: php mysql schema primary-key


【解决方案1】:

这不是在您的架构中发生的事情,而是您在查询数据库时所做的事情。

要从相关表中获取信息,请加入该表。

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 参数化查询的好时机。

【讨论】:

    【解决方案2】:
    $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");
    

    您还需要从学生表中选择值。

    【讨论】:

    • 同意。赞成补偿,因为这 一个有效的答案。查询将执行隐式连接。
    • 有效不好的建议未能满足问题的要求有几个原因——没有加入两个所需的表,尽管多个表具有相同的列名,但仍选择*,并提供了一个语法差而不是好语法的示例。如果一个回答不仅没有回答问题,而且还教给了新手糟糕的形式,那么它真的值得一票。
    猜你喜欢
    • 2016-03-26
    • 2015-06-10
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    相关资源
    最近更新 更多