2012-01-21 22 views
1

このアップデートには簡単な方法はありますか?簡単にmysqlを更新する方法は?

UPDATE mailbox SET toNew = 1, toDelete = 0 WHERE msgID = 1 AND msgFrom = 1 

UPDATE mailbox SET fromNew = 1, fromDelete = 0 WHERE msgID = 1 AND msgTo = 1 

私はIFを使用してみましたが、それはうまくいきませんでした...

UPDATE mailbox SET IF(msgTo = 1, toNew, fromNew) = 1, toDelete = 0 WHERE msgID = 1 

任意のアイデアは?

答えて

2

これはトリックを行うことができ、彼らは読みやすいように私は

UPDATE mailbox SET toNew = IF(msgTo=1,1,toNew), toDelete = IF(msgTo=1,0,toDelete), fromNew = IF(msgFrom=1,1,fromNew), fromDelete = IF(msgFrom=1,0,fromDelete) WHERE msgID=1 
+0

ような何かを試すことができますか?私はあらかじめ最適化しているわけではありませんが、SETの後のこの種のIFがうまくいきませんでした! –

+0

@ novactown.com SQLは非常に厳しいです –

+0

これは治療になりました!ありがとう。私が実際にこれを見ると、このように論理的に見えます。 –

0

IMO元のクエリを好むのに私は何のフラグと何順列あなたに基づいて(あなたが望むロジック約100%わからないんだけど)持っているが、私は、彼らがより読みやすいですが、1つのクエリが2よりも高速ではないでしょう同意し

UPDATE mailbox 
SET 
    toNew = msgFrom, 
    fromNew = msgTo, 
    toDelete = CASE WHEN msgFrom = 1 THEN 0 ELSE toDelete END, 
    fromDelete = CASE WHEN msgTo = 1 THEN 0 ELSE fromDelete END 
WHERE 
    msgID = 1; 
+0

ありがとう、ちょうどこれがまた動作するか見てください。 –

関連する問題