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

use*_*659 3 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));
Run Code Online (Sandbox Code Playgroud)

我的查询将记录数组插入data表中.我想更改查询,以便它将更新记录,如果它存在,否则它将插入记录.

Rob*_*bie 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);
Run Code Online (Sandbox Code Playgroud)

希望你读到它时不言自明?


$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);');  
Run Code Online (Sandbox Code Playgroud)

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