如果存在则更新,否则插入[重复]

Posted

技术标签:

【中文标题】如果存在则更新,否则插入[重复]【英文标题】:UPDATE if exists else insert [duplicate] 【发布时间】:2015-07-04 03:29:39 【问题描述】:

如果在这种情况下存在其他插入,则 UPDATE 的正确格式是什么 - 我已设法分别进行更新和插入,但需要将它们放在一起?

我想要的是 - 如果日期存在,则更新为全天,如果不存在,则插入包含新详细信息的新行。

$date = (isset($_POST['date']) ? $_POST['date'] : null);
$reservationType = (isset($_POST['reservation-type']) ? $_POST['reservation-type'] : null);

$connect = new mysqli($servername, $username, $password, $dbname);


// check connection 

if ($connect->connect_error) 
    die("connection failed: ". $connect->connect_error);


$sql = "SELECT * FROM reservations";
$result = $connect->query($sql);

if ($result -> num_rows > 0) 
    while ($row = $result->fetch_assoc()) 
        if ($date == $row['date_of_reservation']) 
           "UPDATE reservations SET reservationType = 'FULLDAY' WHERE   date_of_reservation='$date'";
    
    else 
        "INSERT INTO reservations (date_of_reservation, reservationType) VALUES ('$date', '$reservationType')";
        
    

【问题讨论】:

那么给定的代码到底有什么问题? INSERT ... ON DUPLICATE KEY UPDATE -> If you specify ON DUPLICATE KEY UPDATE, and a row is inserted that would cause a duplicate value in a UNIQUE index or PRIMARY KEY, an UPDATE of the old row is performed. 问题是给定的代码不起作用 - 因为数据库没有任何反应 您没有进行查询,您只是定义了 2 个查询字符串。您需要对这些字符串执行$connect->query() 【参考方案1】:

来自the manual:

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=c+1;

【讨论】:

你能解释一下c=c+1是什么意思吗? ♫ c is for cookies, that's good enough for me ♫ - 说真的,它代表“列”。 @ChriMarie 最后的+1是什么意思? +1 我们只是在当前值上加 1。相反,您可能想要ON DUPLICATE KEY UPDATE reservationType = 'FULLDAY' 抱歉回复晚了,但周末非常忙碌。您的最后一个建议 - 在评论中效果很好:)

以上是关于如果存在则更新,否则插入[重复]的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL从另一个表更新数据,如果存在,否则插入[重复]

如果存在,我需要更新,否则使用 Linq 插入 SQL

数据库:如果存在则“更新”如果不存在则插入 [重复]

MySQL:如果值存在,则对行进行更新,如果值不存在,则插入 [重复]

如果不存在Mysql,则插入[重复]

如果数据存在,则更新其他插入,使用子查询或等的mysql [重复]