如果存在则更新,否则插入[重复]
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'
抱歉回复晚了,但周末非常忙碌。您的最后一个建议 - 在评论中效果很好:)以上是关于如果存在则更新,否则插入[重复]的主要内容,如果未能解决你的问题,请参考以下文章