【发布时间】:2013-12-10 06:21:20
【问题描述】:
我正在尝试在 mySQL 数据库中存储一对多关系,并且我希望尽可能避免重复条目。
我在互联网上阅读并看到“ON DUPLICATE KEY UPDATE”是一个选项。这对我的情况有用吗?
代码:
function insert_options($uid, $array) {
if(!is_array($array)) {
return false;
}
$db = db_connect();
foreach($array as $a) {
$sql = 'INSERT INTO newsletter_coupon_codes_options (uid, option_name, value) VALUES (?, ?, ?)';
$stmt = $db->prepare($sql);
if($stmt === false) {
echo "Prepare failed: (" . $db->errno . ") " . $db->error;
}
$stmt->bind_param('iss', $uid, $a, $value);
$value = '1';
$stmt->execute();
}
}
表格
UID(INT11), OPTION_NAME(varchar(255)), VALUE(INT(11))
我尝试将ON DUPLICATE KEY UPDATE value = 1 添加到$sql 语句中,但它似乎没有做任何事情。基本上我想确保当我插入数据时,如果uid 和option_name 存在,它只是将value 设置为1 并且不会创建新条目。
我没有设置唯一键,只有uid 上的主键。我不确定要做什么独特。我不能使uid 唯一,因为每个uid 会有多个条目。我也不能使 option_name 唯一,因为多个 uid 会有相同的 option_name
最好的方法是什么?
【问题讨论】:
-
您是否在该表中添加了唯一键..
-
@Sundar > 不。我只有一个 PK
uid。我不确定要做什么独特。我不能让uid唯一,因为每个uid会有多个条目。我也不能使option_name独一无二,因为多个uid会有相同的option_name。你能推荐一些东西吗? -
您应该使用唯一键来更新条目。主键查找速度更快,因此您可以在决定插入或更新后首先检查重复的过程。但主键也支持重复更新dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
-
你想要
ON DUPLICATE KEY UPDATE value = VALUES(value)
标签: php mysql sql-insert on-duplicate-key