2010-12-06 9 views
0

Mysql(compagnie)テーブルの(emails)フィールドを更新する必要があります。私は解決策を探して、各行を、購読していない電子メールだけを含むリスト(CSVファイル)と比較します。電子メールが登録解除されている場合は、この行の(ニュースレター)フィールドを更新し、NOに設定する必要があります。おそらく、私は比較するために私のテーブルまたは別のテーブルの列に1万個の電子メールを入れたCSVファイルをインポートする必要がありますか?また、私はインデックスを作成し、テーブルをロックすると思います。MySQL:この行の別の値が10 000値の 'リスト'の値と等しい場合、値を更新してください

など。すべての電子メールあなたによって置き換えられます

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

答えて

0

の必要はありませんが、ちょうど電子メールのリストを内破し、

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

...のように、単一のクエリで比較を行います更新を作るために、私は手動でメールアドレスを入力しなければなりません最も簡単な方法は、2つの列を持って解除して購読することで、このようなIN('email1','email2','email3',...)

+0

あなたは確かに文字列の長さの制限を押してください!私はmax_allowed_pa​​cketが1ギガビットのギガバイトだと知っていますが、まだ... – dnagirl

+0

@dnagirl - これはちょうど一致と更新タスク10,000 * 100バイト= 100Mb、まだ大丈夫だと思います。この長いクエリをファイルに保存し、mysql を使って実行すると、まったく怪我をすることはありません。 – ajreal

+0

あなたのソリューションは非常にうまく動作します、ありがとう! – researchamw

0

としてCSVに

を持っています。 joinを使用してサブスクライブ・テーブルを更新する。

UPDATEサブスクリプション SETニュースレター= "いいえ" FROM subscribeサブスクリプションに加入するON(subscribe.email = unsubscribe.email);

関連する問題