gpt4 book ai didi

php - MySQL - 插入时重复父列值

转载 作者:搜寻专家 更新时间:2023-10-30 22:24:39 27 4
gpt4 key购买 nike

假设我有三个表:

类别

| column | data_type   |
|--------|-------------|
| id | int(10) |
| code | int(5) |
| name | varchar(50) |

存款

| column | data_type   |
|--------|-------------|
| id | int(10) |
| code | int(5) |
| name | varchar(50) |

项目

| column        | data_type   |
|---------------|-------------|
| id | int(10) |
| category_id | int(10) |
| deposit_id | int(10) |
| category_code | int(5) |
| deposit_code | int(5) |
| name | varchar(50) |

{parent}_id 列是外键约束。 {parent}_code 是应该在父表记录中匹配的常规列。

因此,出于某些原因,我必须在 items 表中插入相同的 code(引用父级 id)。实际上,在运行 insert 语句之前,我在执行时间(PHP 应用程序)上运行了一堆 select 语句。像这样的东西:

// Begin transaction...
$categoryCode = Category::selectCode($categoryId);
$depositCode = Deposit::selectCode($depositId);

try {
$item = Item::insert([
'category_id' => $categoryId,
'deposit_id' => $depositId,
'category_code' => $categoryCode,
'deposit_code' => $depositCode,
'name' => $name,
]);
} catch (Exception $e) {
// Rolling back...
}
// Commiting...

这会减慢处理速度,并且不能确保基于 code 列的完整性。

我是 SQL 的新手,但我认为更好的方法是在 insert 语句中自动填充这些列。如何在 items 子表上复制 {parent}_code 列?

最佳答案

基本上,您不需要在 items 表中使用 {parent}_code。但有时,它是需要的。如果你真的需要那些,你可以做“插入选择”而不是“插入值()”查询看起来像这样

INSERT INTO items (category_id, deposit_id, category_code, deposit_code, name)
SELECT c.category_id, d.deposit_id, c.category_code, d.category_code, {name_val}
FROM categories as c JOIN deposits as d
ON (c.category_id= {c_id} and d.deposit_id= {d_id})

这是简单的交叉连接 whti 特定的 id 值。 IO 成本可能与单独的多个查询相同。但这会减少执行次数。它将减少总执行时间。

关于php - MySQL - 插入时重复父列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55047140/

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