Multi sql обновления в одном запросе к базе данных - PullRequest
0 голосов
/ 11 августа 2011

Возможно ли в Mysql превратить этот запрос в 1 запрос?

UPDATE users SET users.title =1 WHERE  users.oldId =  'adab01' LIMIT 1 ; 
UPDATE users SET users.title =2 WHERE  users.oldId =  'agok01' LIMIT 1 ; 
UPDATE users SET users.title =1 WHERE  users.oldId =  'alla01' LIMIT 1 ; 
UPDATE users SET users.title =2 WHERE  users.oldId =  'allm01' LIMIT 1 ;

Что-то похожее на это в SELECT:

INSERT INTO users (first_name,last_name) VALUES("John", "Doe"),("Jane", "Doe")

Это возможно в MySql?

Просто чтобы вы знали, что я пытался сделать:

Я читал эту статью, Перейти к (Избегайте выполнения запросов SQL в цикле)

http://code.google.com/speed/articles/optimizing-php.html

1 Ответ

2 голосов
/ 11 августа 2011

Для этого вам понадобится оператор CASE, и он не будет ужасно красив:

UPDATE USER SET USER.title = (CASE USER.oldId
                              WHEN 'adab01' THEN 1
                              WHEN 'agok01' THEN 2
                              WHEN 'alla01' THEN 1
                              WHEN 'allm01' THEN 2 
                              ELSE USER.oldID end)
WHERE USER.oldId in
(
    'adab01',
    'agok01',
    'alla01',
    'allm01'
)

Обратите внимание, что WHERE является необязательным, поскольку без него данные не должны быть изменены без необходимости, но они также будут "касаться" каждой строки таблицы, а не только тех, которые требуют обновления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...