Массовое обновление в MYSQL - PullRequest
4 голосов
/ 27 июня 2009

У меня есть таблица, содержащая данные о некоторых пользователях.

Многие из них используют нашу внутреннюю систему электронной почты на OLDHOST.com. Мы обновились до более новой системы на NEWHOST.com. Все имена пользователей пользователей одинаковы, поэтому, если у вас был dave@OLDHOST.com, вы теперь dave@NEWHOST.com

Есть ли лучший способ изменить все поля электронной почты в таблице пользователей, не выбирая все строки в скажем PHP, затем проверяя, содержит ли электронная почта OLDHOST, а затем заменяя строку на NEWHOST?

Есть ли в этом удивительный оператор SQL, чтобы помочь с этим?


Пример некоторых таблиц (упрощенно)

id | firstname | surname | email
------------------------------------------------
1  | dave      | smith   | a21dsmith@OLDHOST.com
2  | barry     | jones   | a21bjones@OLDHOST.com

и т.д.

Все, что нужно изменить, - это любые электронные письма, содержащие OLDHOST (не все делают) на NEWHOST.

1 Ответ

7 голосов
/ 27 июня 2009

Вам нужно будет заменить соответствующую часть каждой строки в операторе обновления, получить подстроку имени хоста после @ с ЗАМЕНЕ и заменить ее.

UPDATE table SET email=REPLACE(email,'OLDHOST.com', 'newhost.com');

Примечание: REPLACE () * чувствителен к регистру, поэтому вы можете использовать LOWER(email) внутри функции REPLACE, если вам нужно отследить все возможности регистра, как показано ниже:

UPDATE table SET email=REPLACE(LOWER(email),'oldhost.com', 'newhost.com');

Это также преобразует все ваши адреса электронной почты в нижний регистр, поэтому помните об этом:)

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