我必须使用一个动态字段和另一个静态字段的ON DUPLICATE KEY指令执行多重插入/更新。我有一张“通知”表,上面有字段:

ID (BIGINT AUTOINCREMENT PRIMARY KEY),
user (BIGINT UNIQUE),
creator (BIGINT UNIQUE),
type (TINYINT UNIQUE),
value (BIGINT UNIQUE),
date (INT),
readed (TINYINT),
erased (TINYINT).

我必须为每个用户插入/更新一行(ID将通过查询提取),因此字段“user”的值将是动态的,其他的是静态的。如何在MySQL上只使用一个查询来执行此操作?

最佳答案

如果可以使用PDO,则可以在添加完所有记录后构建查询并提交它。
下面是将beginTransaction与commit一起使用的示例。
这将准备查询,然后循环遍历用户列表并分配每个记录。
循环之后,它提交/操作查询。

$dbc->beginTransaction();
$sql =  'INSERT INTO notifications (id,user,creator,type,value,date,readed,erased) '
    .   'VALUES (:id,:user,:creator,:type,:value,:date,:readed,:erased) '
    .   'ON DUPLICATE KEY UPDATE user=:user ';

$sth= $dbc->prepare( $sql );


foreach( $userlist as $user )
{
    $sth->execute( array(
        ':id'=>$user['id'],
        ':user'=>$user['user'],
        ':creator'=>$user['creator'],
        ':type'=>$user['type'],
        ':value'=>$user['value'],
        ':date'=>$user['date'],
        ':readed'=>$user['readed'],
        ':erased'=>$user['erased']
     ));
}

$dbc->commit();

一些参考点:
PDO Prepared Statements
PDO prepare
PDO Commit

关于php - 在MySQL上进行多个INSERT/UPDATE,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28024375/

10-10 01:58