2017-10-12 4 views
1

から削除された場合、私は次のクエリ削除行の対応するユーザが最初にテーブル

DELETE 
FROM 
    rfs_users 
WHERE 
    ID > 1 AND user_registered < '2017-05-16 12:09:54' AND user_login NOT IN ('username1', 'username2') 

を使用して、テーブルから一部の行(ユーザー)を削除しています、私は別のテーブルを持っているし、私も必要そこからいくつかの行を削除します。このテーブル(rfs_usermeta)は構造が異なり、同じクエリを使用することはできません。

rfs_usersでは、1つの行が1人のユーザーに対応します。 rfs_usermetaでは、複数の行が1人のユーザーに対応します。私はちょうど使用することができる

DELETE FROM rfs_usermeta WHERE user_id > 1 

しかし、それはほとんどすべての行を削除します。そのユーザーがrfs_usersでも削除される場合は、rfs_usermetaのユーザーを削除する必要があります。例えば

// loop rows in rfs_users 
for (row in rfs_users) { 
    // target specific rows 
    if (row.user_id > 1 && row.user_registered < '2017-05-16 12:09:54' && !('username1', 'username2').includes(row.user_login)) { 
     // delete matching row 
     row.remove() 
     // also delete rows from rfs_usermeta 
     rfs_usermeta.getRows(row.user_id).remove() 
    } 
} 

どのように私はこのクエリを形成していますか?

答えて

2

usermetaには、usersテーブルに対する外部キー制約がありますか?もしそうなら、あなたは参照された行で起こることを設定することができます。

あなたは、自動的にこのようusermetaに外部キー制約を追加することで対応する行を削除することができます

ALTER TABLE usermeta ADD CONSTRAINT FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE; 

これは削除され、ユーザーを参照するすべてのusermetaの行を削除します。

これを行わない場合は、usermeta個の行を削除するユーザーテーブルにトリガを追加することもできます。

・ホープこのことができます;)

+0

これはトリックでした。しかし、私はSQLに精通していないので、私はそれを調べなければなりませんでした。 [FOREIGN KEY Constraint](https://www.w3schools.com/sql/sql_foreignkey.asp)は私の理解を助けました。 – akinuri

1

実行このalter.Onはカスケードは自動的にこのの世話をします削除します。

alter table rfs_usermeta modify constraint fk_name foreign key (user_id) references rfs_users (ID) on delete cascade; 
関連する問題