我正在使用以下查询从表中删除一些行(用户)
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
中,一行对应于一个用户。在rfs_usermeta
中,多行对应于一个用户。我可以用DELETE FROM rfs_usermeta WHERE user_id > 1
但这几乎会删除所有行。如果要在
rfs_usermeta
中删除用户,我需要在rfs_users
中删除该用户。例如:
// 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()
}
}
如何形成此查询?
最佳答案
usermeta
是否对users
表有外键约束?如果是这样,您可以设置引用行中发生的事情。
通过将外键约束添加到usermeta
中,可以自动删除相应的行,如下所示:
ALTER TABLE usermeta ADD CONSTRAINT FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
这将删除引用已删除用户的所有
usermeta
行。如果不想这样做,还可以向用户表添加一个触发器,该触发器将删除
usermeta
行。希望这有帮助;)