Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / MySQL Новый топик    Ответить
 Помогите оптимизировать UPDATE  [new]
f50
Member

Откуда: Россия
Сообщений: 424
Коллеги помогите, можно ли в один UPDATE завернуть код.

Таблица grid такая.

idworkidday h0h1h2h3h4
2510500510
2510600005
2510700210
3510550020
3510604005
3510700550


надо все 5 заменить на нули в idwork=35. Другие цифры не трогать. Строк много, и h0...h23, тоже их много. У меня получается не красиво. Цикл по строкам (сейчас их тут 3 строчки idwork=35) и потом цикл 0..23, итого получается 72 UPDATE! (((((

UPDATE grid SET h0=0 WHERE idwork=35 AND idday=105 AND h0=5
UPDATE grid SET h1=0 WHERE idwork=35 AND idday=105 AND h1=5
UPDATE grid SET h2=0 WHERE idwork=35 AND idday=105 AND h2=5
... и так 72 раза


А может быть под сотню-две строк idwork=35, что будет вообще кошмар с количеством UPDATE.
База спроектирована так, её не перекроить про новой.
Как можно красиво решить задачу?
29 сен 17, 11:25    [20831203]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать UPDATE  [new]
982183
Member

Откуда:
Сообщений: 935
f50
надо все 5 заменить на нули в idwork=35.

+ idday=105 ?
29 сен 17, 11:32    [20831224]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать UPDATE  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 15944
UPDATE grid 
SET h0=CASE h0 WHEN 5 THEN 0 ELSE h0 END
  , h1=CASE h1 WHEN 5 THEN 0 ELSE h1 END
  , h2=CASE h2 WHEN 5 THEN 0 ELSE h2 END
  , h3=CASE h3 WHEN 5 THEN 0 ELSE h3 END
  , h4=CASE h4 WHEN 5 THEN 0 ELSE h4 END
WHERE idwork=35 
  AND idday=105
29 сен 17, 11:36    [20831245]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать UPDATE  [new]
f50
Member

Откуда: Россия
Сообщений: 424
Akina
UPDATE grid 
SET h0=CASE h0 WHEN 5 THEN 0 ELSE h0 END
  , h1=CASE h1 WHEN 5 THEN 0 ELSE h1 END
  , h2=CASE h2 WHEN 5 THEN 0 ELSE h2 END
  , h3=CASE h3 WHEN 5 THEN 0 ELSE h3 END
  , h4=CASE h4 WHEN 5 THEN 0 ELSE h4 END
WHERE idwork=35 
  AND idday=105


Класс, узнал что так можно, спасибо!!! UPDATE можно столько, сколько строк, это уже нормально. Хотя я уже думал структуру все таки изменить, добавить столбик час, и всё вопрос исчерпан. Но лучше оставлю структуру как было.

982183, ну да, в примере я показал, со 105 24раза, с 106 24раза и т.п.

Но благодаря Akina 24 раза у же не надо ;)
29 сен 17, 12:34    [20831419]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать UPDATE  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 15944
f50
со 105 24раза, с 106 24раза

WHERE ...
  AND idday IN (105, 106)
позволит за один раз... а если надо обработать все idday - так вообще нафиг это условие из запроса.
29 сен 17, 13:20    [20831583]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать UPDATE  [new]
f50
Member

Откуда: Россия
Сообщений: 424
Akina , да да, точно, уже реализовал, красотища!!! Счастья и удачи вам!
29 сен 17, 13:33    [20831614]     Ответить | Цитировать Сообщить модератору
Все форумы / MySQL Ответить