0

スタックオーバーフロー。PHP と SQL の初心者はこちら。

マルチユーザー プライベート メッセージング システムの一部として、PDO を介してデータベースと適切にやり取りする方法を学ぶために書き込もうとしてきました。ユーザーがメッセージを削除したときに実行される 2 つの個別のクエリがあります。 ) :

UPDATE messages SET s_deleted = 1 WHERE id = :id AND sender = :sender
UPDATE messages SET r_deleted = 1 WHERE id = :id AND recipient = :recipient

それらは私が必要とすることを達成するのに十分に機能しますが、私が現在行っているように、両方を次々に実行すると、特に効率的ではありません。

CASEを調べましたが、理解できる限り、必要なものではありませんでした。

これら 2 つのクエリを組み合わせて、データベースに無関係な要求を追加しないようにする方法はありますか? 各クエリを個別の関数、つまりdeleteMessageSender()deleteMessageRecipient( ) に結合したほうがよいでしょうか?

4

2 に答える 2

1
UPDATE messages
SET s_deleted = IF(sender = :sender, 1, s_deleted),
    r_deleted = IF(recipient = :recipient, 1, r_deleted)
WHERE id = :id

ご覧のとおり、"トリック" は、基準が満たされない場合に列を既存の値に設定するだけで、必要な場合にのみ更新されます。

于 2013-05-26T20:59:48.823 に答える
1
UPDATE messages 
SET s_deleted = IF(sender = :sender, 1, s_deleted),
r_deleted = IF (recipient = :recipient, 1, r_deleted)
WHERE id = :id AND 
(sender = :sender OR recipient = :recipient);
于 2013-05-26T21:01:28.407 に答える