计算并执行插入或更新

时间:2013-07-11 01:55:18

标签: mysql database pdo

您好我想知道是否可以只在一个查询中执行此操作。

$qryString="SELECT * FROM votes WHERE userID='$userID' AND messageID='$messageID'"; 

$qry = $pdo->prepare($qryString);
$qry->execute();

$resultArray=$qry->fetchAll();
$num=count($resultArray);

if ($num==0)
{$qryString= "INSERT INTO Votes (userID, value, messageID) VALUES ('$id', '$value', '$messageID')" }

else
{ $qryString = "UPDATE votes SET value='$value', WHERE userID='$id' AND messageID='$messageID' " }

这样做我将执行至少两个查询。这是一种“怪诞”的方法(有性能问题)或者这是正确的方法吗?

2 个答案:

答案 0 :(得分:3)

Assumine userID有一个唯一索引:

INSERT INTO Votes (userID, value) VALUES (:id, :value)
ON DUPLICATE KEY UPDATE value = VALUES(value);

此外,由于您正在使用PDO,因此您应该在预准备语句中使用占位符,而不是如上所示插入变量。

答案 1 :(得分:0)

我会推荐以下内容:

获取点数
使用MYSQL计数功能:

SELECT COUNT(*) FROM votes WHERE UserID='$id';

这将返回单个标量(记录数),从而节省PHP从提取整个结果集

其次,您在决定更新或插入代码时完全正确。逻辑属于代码,而不属于数据库。可以使用Barmar的答案来完成,这是一个风格问题。

<强>参考
http://dev.mysql.com/doc/refman/5.0/en/if.html
http://dev.mysql.com/doc/refman/5.1/en/counting-rows.html