我有下表:
CREATE TABLE 'Test' ('Id' INTEGER PRIMARY KEY NOT NULL, 'Val' INTEGER)
如果给定的ID不存在,我想插入具有默认Val的ID。但是,如果它已经存在,我想增加Val的值。
我有以下代码:
$data = array(':id'=>$id); $stmt = $db->prepare('INSERT INTO Test (Id, Val) Values(:id, 1);'); if(!$stmt->execute($data)){ $stmt = $db->prepare('UPDATE Test SET Val=Val+1 WHERE Id=:id'); $stmt->execute($data); }
并且它可以工作,但是我想用一个SQL语句来完成。我可以吗?
编辑 :
从@ Xikinho90的答案,我的最终代码是
$stmt = $db->prepare(' INSERT OR REPLACE INTO Test (Id,Val) VALUES ( :id, COALESCE((SELECT Val + 1 FROM Test WHERE id = :id), 1) ) '); $stmt->execute(array(':id'=>$id));
您可以使用插入或替换。
我认为这可以解决问题
INSERT OR REPLACE INTO Test (Id,Val) VALUES ( 1, COALESCE((SELECT Val + 1 FROM Test WHERE id = 1), 1) ); INSERT OR REPLACE INTO Test (Id,Val) VALUES ( 2, COALESCE((SELECT Val + 1 FROM Test WHERE id = 2), 1) );
您只需要用输入的ID替换数字
谢谢奇科