使用现有的webapp(PHP / MySQL)我来到这一步: 我有2个表存储名称和类型ID。它们之间的关系是N< ----> N我之间有另一个表。 (见图)
我有一张名为“类别”的最后一张表,它没有被提及。我要做的是: 具有相同值的合同和客户具有id_category = 1的重复合同和客户,id_category = 3。以及重复它们之间的关系。
到目前为止,我已设法将所有合同和客户分开复制,使用:
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”字段为自动增量,一切正常。)
但是关于复制关系,我无法弄明白 HOW 来解决这个问题。
其他信息:
答案 0 :(得分:0)
你说你不能改变表结构。如果可以的话,我可能会建议不要使用这些表的非规范化(行重复)。
我也有点困惑,因为你说你必须复制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();