首页 > 解决方案 > 通过多个外键 INSERT INTO 多个表

问题描述

我有多个表通过几个不同的外键连接在一起(见附件图片)。 表格

我正在尝试插入项目表。我一直在尝试通过下面的代码来实现这一点,但它不起作用。现在我收到一条错误消息,说 client_id_fk 和 project_manager_id_fk 都没有值。这是有道理的,因为我没有将它们包含在插入中,但没有自动递增,而且我也不能只向这些字段添加随机 int,因为这也会引发错误。如果我将 client_id_fk 和 project_manager_id_fk 设置为 NULL,它在技术上有效,但是其他表中没有数据...请帮助


$sql1 = "INSERT INTO PROJECTS (Project_Name, StartDate) VALUES( '".$_POST["Project_Name"]."','".$_POST["StartDate"]."')";
$sql2 = "INSERT INTO CLIENTS(Client_Name, Client_Email, Client_Phone) VALUES ('".$_POST["Client_Name"]."','".$_POST["Client_Email"]."','".$_POST["Client_Phone"]."')";
$sql3 = "INSERT INTO PROJECT_MANAGERS(ProjectManager_Name,Project_Manager_Email, Project_Manager_Phone) VALUES ('".$_POST["ProjectManager_Name"]."','email', 'phone')";     
$sql4 = "INSERT INTO TYPE_OF_WORK(TypeOfWork) VALUES ('".$_POST["TypeOfWork"]."')";

标签: phpmysqlforeign-keys

解决方案


退后一步,想想你正在塑造的关系。你告诉 MySQL 一个项目有一个客户和一个项目经理;那讲得通。然后,您尝试插入仅包含以下信息的项目:

INSERT INTO PROJECTS (Project_Name, Start_Date) ...

你得到的错误是问你“这个项目是为哪个客户服务的,项目经理是谁?” 那是只有你才能知道的事情。

  • 如果是新客户,则需要在 Project 之前插入;如果是新的项目经理,您也需要在项目之前插入它。插入它们后,您需要获取它们的 ID,例如使用LAST_INSERT_ID()函数.
  • 如果它是现有的客户和/或项目经理,您需要根据您的应用程序中任何有意义的逻辑来查找他们的 ID。

一旦你有了这两个 ID,你就可以创建你的项目:

INSERT INTO PROJECTS (Project_Name, Start_Date, Client_Id, Project_Manager_Id) ...

推荐阅读