您好我想知道是否可以只在一个查询中执行此操作。
$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' " }
这样做我将执行至少两个查询。这是一种“怪诞”的方法(有性能问题)或者这是正确的方法吗?
答案 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