2009-06-27 6 views
4

J'ai une table contenant des données sur certains utilisateurs.Mise à jour en masse dans MYSQL

Beaucoup d'entre eux utilisent notre système de messagerie interne chez OLDHOST.com. Nous avons mis à jour un nouveau système à NEWHOST.com. Tous les noms d'utilisateur des utilisateurs sont les mêmes, donc si vous aviez [email protected], vous êtes maintenant [email protected]

Y a-t-il un meilleur moyen de changer tous les champs d'email dans la table des utilisateurs sans sélectionner toutes les lignes en disant PHP, puis en vérifiant si l'email contient OLDHOST, puis en remplaçant la chaîne par NEWHOST?

Existe-t-il une requête SQL géniale pour vous aider?


Exemple d'une partie de la table (simplifié)

id | firstname | surname | email 
------------------------------------------------ 
1 | dave  | smith | [email protected] 
2 | barry  | jones | [email protected] 

etc.

Tout ce qui doit être changé est les e-mails qui contiennent ancienhôte (pas tous) à newhost.

Répondre

7

Vous devrez remplacer la partie pertinente de chaque chaîne dans une instruction de mise à jour, en saisissant la sous-chaîne du nom d'hôte après le @ avec un REMPLACEMENT et en le remplaçant.

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

Note: REPLACE() est sensible à la casse, de sorte que vous pouvez utiliser LOWER(email) dans la fonction REMPLACER si vous devez prendre toutes les possibilités de cas, comme ci-dessous:

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

Cela permettra également convertissez toutes vos adresses e-mail en minuscules, alors soyez conscient de cela :)

+0

Non, désolé - c'est une adresse e-mail stockée pour chaque utilisateur dans une colonne appelée e-mail sous forme de chaîne. –

+0

J'aurais mal lu une partie de votre question :) édité pour corriger –

+0

Ah - c'est joli! –