我在函数
中有这个(伪)代码if(!$foo->id){
$foo = INSERT INTO foos (....) VALUES (.....)
$foo->id = new_inserted_id();
INSERT INTO my_table (foo_id, field1, field2, field3)
VALUES ($foo->id, 'aaaa', 'bbbb', 'cccc');
} else {
// UPDATE $foo and existing record in my_table
$foo = UPDATE foos SET ..... WHERE id = $foo->id;
// first check if already exist record having foo-id - this is basically for old records
$q = SELECT COUNT(id) AS count
FROM my_table
WHERE foo_id = $foo->id
LIMIT1
if($q->count > 0){
// update
UPDATE my_table SET field1 = 'aaaa', field2 = 'bbbb', field3 = 'cccc'
WHERE foo_id = $foo->id
LIMIT 1;
} else {
INSERT INTO my_table (foo_id, field1, field2, field3)
VALUES ($foo->id, 'aaaa', 'bbbb', 'cccc');
}
}
我想专注于UPDATE
部分(第一部分)。而不是选择并检查是否是新的插入或更新,我可以执行INSERT ON DUPLICATE UPDATE
但是还有WHERE
语句吗?像这样:
INSERT ON DUPLICATE UPDATE ... WHERE WHERE foo_id = $foo->id
答案 0 :(得分:1)
使用ON DUPLICATE KEY UPDATE时,不能使用普通的where子句,mysql不允许。您可以使用条件语句作为变通方法。
这样的事情可能就是你想要的。
$q = "INSERT INTO my_table (foo_id, field1, field2, field3)
($foo->id, 'aaaa', 'bbbb', 'cccc')
ON DUPLICATE KEY UPDATE SET
field1 = IF( foo_id = VALUES(foo_id), VALUES('aaaaa'), 'bbbb' ),
field2 = VALUES('bbbbb'),
field3 = VALUES('cccc')";