gpt4 book ai didi

mysql - 如果两个键不存在则插入表

转载 作者:行者123 更新时间:2023-11-29 13:57:04 25 4
gpt4 key购买 nike

我有一个映射 itemId(item.id) 和 tagId(tag.id) 的表。

我正在编写一个需要插入新行的查询,但前提是 itemId 和 tagId 都还没有条目。最好的方法是什么?

这是我当前的查询,尚未检查现有匹配项:

// create tag-item maps
$sql = 'INSERT INTO item_tag
SELECT :itemId AS iid, tag.id AS tid
FROM tag
WHERE tag.name=:name';
try{
$stmt = $db->dbh->prepare($sql);
for($i = 0; $i < $count; $i++) {
$data = array(':itemId' => $itemId, ':name' => $tags[$i]);
$result = $stmt->execute($data);
if($result !== false) {
// Do nothing
}else {
return false;
}
}
return true;
}catch(PDOException $e) {
logit($e->getMessage());
return false;
}

最佳答案

UNIQUE 约束将是理想的解决方案,并且根据 docs MyISAM 引擎支持它们。

ALTER TABLE item_tag ADD CONSTRAINT item_tag_iid_tid_uq UNIQUE (iid, tid);

然后,如果您的 INSERT 尝试添加重复的 (iid, tid) 对,它将抛出错误,您可以在 捕获代码。

如果您不想执行 UNIQUE 约束,则可以向 INSERT 查询添加“存在”检查:

INSERT INTO item_tag
SELECT :itemId AS iid, tag.id AS tid
FROM tag
WHERE tag.name=:name' AND NOT EXISTS (
SELECT * FROM item_tag WHERE iid=:itemId AND tid=tag.id)

我使用自己的不同名称的表对此进行了测试,因此希望我将其正确“翻译”为您的表/列名称。

关于mysql - 如果两个键不存在则插入表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15687356/

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