2013-07-24 49 views
0

我有如下表:如何插入如果不存在,或增加,如果存在SQLite?

CREATE TABLE 'Test' ('Id' INTEGER PRIMARY KEY NOT NULL, 'Val' INTEGER) 

如果给定的ID不存在,我想用默认瓦尔插入的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)); 

回答

2

您可以使用插入或更换。

我认为这会做的伎俩

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) 
     ); 

你必须与你的inputed id来代替数字

感谢 奇科

相关问题