2010-12-06 4 views
0

Je dois mettre à jour un champs (emails) dans la table Mysql (compagnie). Je recherche une solution pour comparer chaque ligne avec une liste (fichier CSV) qui ne contient que des e-mails non soumis. Si les e-mails sont désinscrits, je dois mettre à jour les champs (newsletter) pour cette ligne et les mettre à NON. Probablement, que je devrais importer mon fichier CSV avec 10 000 courriels inscrits dans une colonne de ma table ou un autre tableau pour faire une comparaison? Aussi, je pense créer un index et verrouiller la table.MySQL: Mettre à jour une valeur si une autre valeur pour cette ligne est égale à une valeur d'une 'liste' de 10 000 valeurs

E.g. de faire une mise à jour mais je dois entrer dans l'e-mail manuellement:

CREATE INDEX idx ON compagnie (emails); 
LOCK TABLES compagnie WRITE; 
UPDATE compagnie SET newsletter='NO' WHERE email='[email protected]'; 
UNLOCK TABLES compagnie WRITE; 

Répondre

0

Pas besoin, juste imploser la liste des e-mails et faire la comparaison dans la requête unique comme

CREATE INDEX idx ON compagnie (emails); 
LOCK TABLES compagnie WRITE; 
UPDATE compagnie SET newsletter='NO' WHERE email IN(...); 
UNLOCK TABLES compagnie WRITE; 

... sera remplacé par tous les e-mails vous ont dans le CSV

tels que IN('email1','email2','email3',...)

+0

vous aimez vraiment pousser les limites sur la longueur de la corde! Je sais max_allowed_packet plafonne à 1Gb, mais toujours ... – dnagirl

+0

@dnagirl - Je crois que c'est juste une correspondance et mettre à jour la tâche 10 000 * 100 octets = 100 Mo, toujours bien. Et si vous sauvegardez cette longue requête dans un fichier, et que vous exécutez en utilisant mysql ajreal

+0

votre solution fonctionne très bien, merci beaucoup! – researchamw

0

la meilleure façon est d'avoir deux colonnes, vous désabonner et abonnez-vous. Utiliser join pour mettre à jour la table d'abonnement.

MISE À JOUR s'abonner SET newsletter = "Non" FROM subscribe Se désinscrire Se désinscrire ON (subscribe.email = unsubscribe.email);

Questions connexes