[英]Check if MySQL entry exists, if it does, overwrite other columns
我有一个 MySQL 表,如下所示
UID | Thing1 | Thing2 | Date
UID 列已设置为唯一且由用户 ID + 日期作为整数组成。 IE 7620150715
我想要做的是检查 UID 是否存在,如果存在,则使用最新信息更新 thing1 和 thing2 列。
如果 UID 不存在,则为所有信息创建一个新行。
目前,可以进入的是
$sql = "INSERT INTO things2 (uid, thing1, thing2, date) VALUES (:uid, :thing1,:thing2,:date)";
但这在使 UID 唯一后不起作用。
我发现 ON DUPLICATE KEY UPDATE 语句似乎是我正在寻找的,但所有答案似乎都在输入中添加 +1,这不是我想要做的。
我正在寻找的一些伪语法会像这样
$sql = "INSERT INTO things2 (uid, thing1, thing2, date) VALUES (:uid, :thing1,:thing2,:date ON DUPLICATE KEY UPDATE (thing1, thing2) VALUES (:thing1, :thing2)";
什么是正确的语法?
最简单/最清晰的方法需要两个步骤:
首先只对(新)UID 执行 INSERT OR IGNORE。 暂时不要理会这些值,因为无论如何您都会更新。 只需确保该表允许使用适当的默认值并且没有太多约束:
INSERT OR IGNORE INTO things2 (uid) VALUES (:uid)
然后执行 UPDATE ... SET a=b WHERE UID=.. 以实际更新记录:
UPDATE thing1=:thing1, thing2=:thing2 WHERE UID = :uid
(未测试,请检查,因为我更喜欢 C++/sqlite 而不是 MySql/php)
你的语法有点错误。 如果 INSERT 失败,那么您可以使用标准的 UPDATE 语法编写 UPDATE 代码,如下所示。
$sql = "INSERT INTO things2
(uid, thing1, thing2, `date`)
VALUES (:uid, :thing1,:thing2,:date )
ON DUPLICATE KEY
UPDATE things2 SET thing1 = :thing1, thing2 = :thing2, `date` = :date";
date
也是一个保留字,所以最好用反引号把它包起来。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.