目前我使用以下查询更新我的表。
$query = "UPDATE `my_table` SET `views` = `views` + 1
WHERE `user_id` IN (".$users.")";
这会将表格中的所有用户更新为各自的观看列值+1。
如果这是新的一天,我需要插入一个新行。为此,我发现(通过堆栈溢出)ON DUPLICATE KEY UPDATE
函数。这是完美的工作,但我不完全确定如何在单个查询中为多个用户执行此操作(如上面的查询)。
我到目前为止的当前查询如下,但仅限于单个用户
$query = "INSERT INTO `my_table` (`user_id`, `day`, `listing`)
VALUES (12, 2, 1)
ON DUPLICATE KEY UPDATE `views`=`views`+1";
我不希望将此查询放在php foreach循环中,因为它会在给定行数(40 - 100)的情况下执行缓慢
答案 0 :(得分:0)
您可以使用mysql事务执行多个查询:http://www.php.net//manual/en/pdo.transactions.php
function ExecuteTransaction($sqlStmts,$params){
try{
$conn = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
$conn->beginTransaction();
$n = count($sqlStmts);
for($i=0; $i<$n; $i++){
$stmt = $conn->prepare($rawStmts[$i]);
$stmt->execute($params[$i]);
}
$conn->commit();
}
catch(PDOException $ex){
$conn->rollBack();
return FALSE;
}
catch(Exception $ex){
$conn->rollBack();
return FALSE;
}
return TRUE;}
$ sqlStmts中的每个条目,即$ sqlStmts [$ i]是一个预准备语句,每个$ params ie,$ params [$ i]是预准备语句的参数数组$ sqlStmts [$ i]
但如果您只是想一次执行它们,您应该执行类似
的操作$query = "INSERT INTO `my_table` (`user_id`, `day`, `listing`)
VALUES (12,2,1),(13,3,2),(14,4,3)
ON DUPLICATE KEY UPDATE `views`=`views`+1";