0

嗨,我想知道是否可以仅在一个查询中执行此操作。

$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' " }

这样做我将执行至少两个查询。这是一种“怪诞”的方法(性能成熟)还是正确的方法?

4

2 回答 2

3

假设userID有一个唯一索引:

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

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

于 2013-07-11T02:00:21.740 回答
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

于 2013-07-11T02:00:34.503 回答