1

割り当てられたタスクに少し問題があります。

私はこの古いphpmynewsletterデータベース(MySQLバックエンド)を持っています。

基本的に、すべての電子メールは次の構造のテーブルに保存されます。

    email   varchar(255)
    list_id int(11)
    hash    varchar(255)
    disclaimer1 tinyint(1)
    disclaimer2 tinyint(1)
    gender  char(1)
    dob date
    region  varchar(50)

したがって、1つの同じ電子メールがテーブルに複数回存在する可能性があります。これは、異なるニュースレター(list_idで識別)で購読されます。

私がする必要があるのは、レコードを更新して、特定のlist_idのdisclaimer1disclaimer2genderdob 、およびregionのフィールドが、他のlist_idに登録されている同じ電子メールで同じになるようにすることです。

例えば:

    email: email1(at)gmail.com
    list_id: 1
    disclaimer1: 0
    disclaimer2: 0
    gender: M
    dob: 1975-05-02
    region: Portugal

    email: email2(at)gmail.com
    list_id: 33
    disclaimer1: 1
    disclaimer2: 0
    gender: M
    dob: 1975-05-02
    region: Portugal

list_id1のレコードの正しい値でlist_id33のレコードを更新するにはどうすればよいですか?

私はPHPを使用していますが、更新クエリをループで実行するのは悪い習慣だと思います。テーブルには約610000レコードがあります。

誰かが私にこのタスクを達成する方法についての洞察を与えてくれることを願っています。

ありがとう、マリオ

4

1 に答える 1

3

@bigmanあなたが投稿したものは正しいようですが、問題は、同じ電子メールでlist_id:1に類似した他のすべてのデータを変更する方法にあると思います。

UPDATE my_table t,
 (
    SELECT
        email,
        disclaimer1,
        disclaimer2,
        gender,
        dob,
        region
    FROM
        my_table
    WHERE
        list_id = 1
) t1
SET 
 t.disclaimer1 = t1.disclaimer1,
 t.gender = t1.gender,
 t.dob = t1.dob,
 t.region = t1.region
WHERE
   t.email = t1.email

これは、list_id:1の電子メールアドレスを持つすべてのエントリで機能するはずです。

于 2012-09-27T22:28:56.003 に答える