0

私は、さまざまなデータ ソースの不適切な扱いで受け継いだ問題を解決しようとしています。善良なユーザーと悪質なユーザーの両方を含むユーザー テーブルがあります。

create table `users`( 
  `user_id` int(13) NOT NULL AUTO_INCREMENT , 
  `email` varchar(255) , 
  `name` varchar(255) ,  
  PRIMARY KEY (`user_id`)
);

このテーブルでは、主キーは現在 user_id に設定されています。

悪意のあるユーザーのみを含む別のテーブル ('users_evil') があります (このテーブルのすべてのユーザーは最初のテーブルに含まれています) - このテーブルの user_id は最初のテーブルのユーザー ID に対応していません。

すべてのユーザーを 1 つのテーブルにまとめて、どれが善でどれが悪いかを単純にフラグ付けしたいと考えています。

私がしたいのは、ユーザー テーブルを変更し、デフォルトで 0 に設定されている列 ('evil') を追加することです。次に、'users_evil') テーブルからデータをダンプし、INSERT..ON DUPLICATE KEY UPDATE を実行します。このデータを最初のテーブルに挿入します (メールが一致する場合は 'evil'=1 を設定します)

問題は、「PK」が「email」ではなく user_id に設定されていることです。これを成功させるための提案、または別の戦略。

このステートメントを実行しても、別の列をステートメントの期間中のみ PK として扱うことはできますか?

4

3 に答える 3

2

これはどうですか:

update users set evil=1 where email in (select email from users_evil);
于 2010-06-07T16:03:46.797 に答える
2
ALTER table add column...

UPDATE users set evil = 0;

UPDATE users u join users_evil ue ON ue.email = u.email and u.name = ue.name set evil = 1;    

users テーブルの悪いユーザーを更新するだけです

于 2010-06-07T16:07:03.447 に答える
0

NULLテーブルの外部結合を実行し、非値を探すことでユーザーが悪意を持っている場所を検出できます。

UPDATE (users LEFT OUTER JOIN evil_users ON users.email = evil_users.email)
  SET users.evil=1
  WHERE evil_users.some_field IS NOT NULL;
于 2010-06-07T16:08:06.770 に答える