我正在尝试在满足条件时更新表,如果不满足则只是插入记录。
我试过这段代码
IF EXISTS (SELECT * FROM table.person WHERE record_id='SomeValue')
UPDATE table.person
SET some_text='new_some_text', some_other_text='some_other_text'
WHERE record_id='old_record_id'
ELSE
INSERT INTO table.person (record_id, person_id, some_text, some_other_text)
VALUES ('new_record_id', 'new_person_id', 'new_some_text', 'new_some_other_text')
但这只会给我一个错误。我得到的错误是一般语法错误。
错误回复:
错误代码:1064。您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以便在'UPDATE table.person SET some_text ='new_some_text',some_other_text ='some_o'第2行附近使用正确的语法
答案 0 :(得分:2)
嗯,从这看起来,这是一个典型的UPSERT(插入或更新)问题。
参考:https://mariadb.com/kb/en/library/insert-on-duplicate-key-update/
根据您的示例,record_id
很可能是您的主键。
所以你的代码可以简单地成为这个。
INSERT INTO table.person (record_id, person_id, some_text, some_other_text)
VALUES ('new_record_id', 'new_person_id', 'new_some_text', 'new_some_other_text')
ON DUPLICATE KEY UPDATE
some_text='new_some_text', some_other_text='some_other_text';
SQLFiddle链接:http://sqlfiddle.com/#!9/9e8c7d7/1/0
答案 1 :(得分:0)
在您的查询中,“那么”在IF
之后丢失IF EXISTS (SELECT * FROM table.person WHERE record_id='SomeValue') **THEN**
请添加“那样”并检查
同时在最后添加“结束如果”
答案 2 :(得分:-1)
我只是使用num_rows检查已发布的id中存在的数据。如果num_rows大于零,则用该id更新数据,否则插入数据。
$sql = "SELECT * FROM table WHERE id= '1'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// ENTER UPDATE QUERY
}
else{
// ENTER INSERT QUERY
}