对于单个查询中的多行,我是否可以更新记录(如果存在),如果不存在则更新?

时间:2012-08-27 05:41:36

标签: php mysql sql

我正在尝试编写一个查询,以使用'implode'以有效的方式插入许多值的数组(比如说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表。我想更改查询,以便它将更新记录(如果存在),否则它将插入记录。

1 个答案:

答案 0 :(得分:9)

您可能想要的是“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);');  

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