嗨,我想知道是否有可能只在一個查詢中執行此操作。計數並執行插入或更新
$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之間sql查詢,導致第二個查詢失敗。一個交易可以解決這個問題,但是'重複密鑰更新'在這裏更好。 – goat
uhm,在最壞的情況下,它只是檢索一個錯誤,或者它會阻礙整個數據庫? – Sonia