2013-07-18 8 views
2

Я обновляю 2 столбца и несколько строк. В настоящее время я запускаю два разных запроса, чтобы сделать это. Можно ли сделать это в одном запросе?Можно ли объединить это в один запрос?

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' 
+0

А что это за '' '' '' ' Любой код, который вы можете поделиться, чтобы рассказать нам о 'it'? –

+0

Начните с описания условий запроса на простом английском языке, и вы найдете это довольно сложно .... – Pleun

+0

Кажется, что два запроса - это подходящее решение для этого \ – TGH

ответ

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') 
+0

@TGH: Он отвечает на вопрос, возможно ли это выполнить в одном утверждении. Я использовал эту технику, прежде всего для повышения производительности и масштабируемости. Меньшее число операторов SQL означает меньшее количество обращений к базе данных. Нам просто нужно убедиться, что план доступа не «хуже», чем планы доступа двух отдельных заявлений. – spencer7593

+0

Я не согласен, что он решает проблему. Тем не менее, мне интересно, есть ли у подхода побочный эффект, который трудно поддерживать, если в предложение where добавлено больше сложностей. – TGH

+0

Я задал этот вопрос с учетом производительности. – Xecure

Смежные вопросы