gpt4 book ai didi

php - 具有 N :M relationship (including relationship) 的重复表

转载 作者:可可西里 更新时间:2023-11-01 07:45:25 26 4
gpt4 key购买 nike

在现有的网络应用程序 (PHP/MySQL) 上工作,我得出了这一点:我有 2 个表存储名称和类型 ID。它们之间的关系是 N<---->N 我之间有另一个表。 (见图)

Tables names and columns have been simplified, but it's pretty much it

我有一个名为“category”的最后一个表,没有图片。我要做的是:将 id_category=1 的契约(Contract)和客户复制到具有相同值且 id_category=3 的契约(Contract)和客户。以及复制它们之间的关系

到目前为止,我已经设法将所有契约(Contract)和客户分开,使用:

INSERT INTO contract (t_name, id_category) SELECT t_name,'3' WHERE id_category=2
INSERT INTO customer (t_name, id_category) SELECT t_name,'3' WHERE id_category=2

(“id”字段自动递增,一切顺利)。

但是关于复制关系,我无法弄清楚如何解决这个问题。

附加信息:

  • 使用临时表可以,但我不能修改现有的结构表。
  • 契约(Contract)可能有 0 到 N 个客户。客户可能有从 0 到 N 份合约。
  • 我可以使用严格的 MySQL 或 PHP。

最佳答案

你说你不能改变表结构。如果可以的话,我可能会建议不要根据您正在做的事情对这些表进行非规范化(行重复)。

我也有点困惑,因为你说你必须将 id_category = 1 的行和关系复制到 id_category = 3,但是你的示例查询有id_category = 2

无论如何,这个答案都应该适用。我会使用 PHP 和 PDO。

$pdo = new PDO('mysql:host=?', $user, $passwd);
$stmtCustomers = $pdo->prepare("INSERT INTO customer (t_name, id_category)
VALUES (t_name, ?) WHERE id_category = ?");
$stmtContracts = $pdo->prepare("INSERT INTO contract (t_name, id_category)
VALUES (t_name, ?) WHERE id_category = ?");
$stmtRelation = $pdo->prepare("INSERT INTO customer_has_contract VALUES (?, ?)");

//Perform in a loop if needed
$pdo->beginTransaction();
$stmtCustomers->execute($target_cat_id, $origin_cat_id);
$cus_id = $pdo->lastInsertId();
$stmtContracts->execute($target_cat_id, $origin_cat_id);
$con_id = $pdo->lastInsertId();
$stmtRelation->execute($con_id, $cus_id);
$pdo->commit();

关于php - 具有 N :M relationship (including relationship) 的重复表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12477444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com