2012-01-21 2 views
1

Есть ли более простой способ для этого обновления?Простой способ сделать mysql UPDATE?

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

Это может сделать трюк, хотя я предпочитаю свои первоначальные запросы, поскольку они более читаемые IMO

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

Я согласен, что они более читабельны, но один запрос не будет быстрее, чем два? Я не оптимизирую предварительную оптимизацию, но он просто наткнулся на меня, что такой 'IF' после' SET' не сработал! –

+0

@ novactown.com SQL очень трюк таким образом –

+0

Это сработало! Благодарю. Когда я на самом деле вижу это так, это выглядит более логичным. –

0

Я не 100% уверен, что логика вы хотите (на основании каких флагов и какие перестановки вы), но вы можете попробовать что-то вроде этого

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

Спасибо, просто посмотрим, работает ли это тоже. –

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