2

2 列と複数の行を更新しています。現在、これを行うために 2 つの異なるクエリを実行しています。1回のクエリで実行することは可能ですか?

UPDATE `messages` SET `from_delete` = NOW() WHERE `thread_hash` = 'abc' AND `from_user_id` = '6'

UPDATE `messages` SET `to_delete` = NOW() WHERE `thread_hash` = 'abc' AND `to_user_id` = '6'
4

1 に答える 1

1

はい、可能ですが、注意が必要です。

UPDATE `messages`
   SET `from_delete` = IF(`from_user_id` = '6',NOW(),`from_delete`)
     , `to_delete`   = IF(`to_user_id`   = '6',NOW(),`to_delete`  ) 
 WHERE (`thread_hash` = 'abc' AND `from_user_id` = '6')
    OR (`thread_hash` = 'abc' AND `to_user_id`   = '6')

「トリック」は、割り当てで条件を使用することです。行を更新しない場合は、列の現在の値を列に割り当てて、「変更なし」操作を行います。

完全を期すために、条件に thread_hash の条件を追加することをお勧めします。これはクエリで何も変更しませんが:

UPDATE `messages`
   SET `from_delete` = IF(`thread_hash` = 'abc' AND `from_user_id` = '6'
                       ,NOW(),`from_delete`)
     , `to_delete`   = IF(`thread_hash` = 'abc' AND `to_user_id`   = '6'
                       ,NOW(),`to_delete`  ) 
 WHERE (`thread_hash` = 'abc' AND `from_user_id` = '6')
    OR (`thread_hash` = 'abc' AND `to_user_id`   = '6')
于 2013-07-18T05:19:02.153 に答える