我可以为一个查询中的多行更新一条记录(如果存在)吗?如果不存在,我可以插入它吗


Can I update a record if it exists, and insert it if not, for multiple rows in a single query?

我正在尝试编写一个查询,以使用"内爆"以有效的方式插入多个值(比如1000)的数组。这是代码。

$sql = array(); 
foreach( $return as $key=>$row ) {
$sql[] = '("'.mysql_real_escape_string($row['fullname']).'",   '.$row['age'].','.$row['since'].','.'"'.mysql_real_escape_string($row['description']).'")';
}
mysql_query('INSERT INTO data (name, age, since, description) VALUES '.implode(',', $sql));

我的查询将记录数组插入到data表中。我想更改查询,以便它在记录存在的情况下更新该记录,否则它将插入该记录。

您可能想要的是一个"ON DUPLICATE KEY"版本,它实际上允许您引用正在输入的数据。

INSERT INTO data (name, age, since, description) VALUES
     ("Bob", 23, "01-01-1980", "friend"),
     ("Bill", 33, "03-01-1980", "tall"),
     ("Jane", 43, "12-01-1980", "thin")
 ON DUPLICATE KEY UPDATE age=VALUES(age),
                         since=VALUES(since),
                         description=VALUES(description);

希望你读的时候能不言自明?


$sql = array();   
foreach( $return as $key=>$row ) {  
    $sql[] = '("'.mysql_real_escape_string($row['fullname']).'",   '.$row['age'].','.$row['since'].','.'"'.mysql_real_escape_string($row['description']).'")';  
}  
mysql_query('INSERT INTO data (name, age, since, description) VALUES '.implode(',', $sql). ' ON DUPLICATE KEY UPDATE age=VALUES(age), since=VALUES(since), description=VALUES(description);');  

编辑,将其添加到上面的用户代码中。

相关文章: