0

我正在制作一个小系统来清理数据库。每个访问该站点的人都会被放入数据库,但如果他/她没有注册,如果他/她第一次访问该站点的时间长于2天。日期作为时间戳存储在 MySQL 中,但看起来像这样:2013-06-05 01:18:43.

所以我想做的是以下几点:

$STH = $DBH->query("DELETE FROM user WHERE type=0 AND joindate < ".date('d-m-Y H:i:s',time()-$userLife));

像这样,时间戳的格式与 MySQL 中的相同。我正在使用$userLife,所以我可以在脚本开头轻松调整这个 var。

然而,问题是,我还需要对包含 this 的其他表进行查询user_id。例如表pages

id | user_id | level | time | views

在此表中,可能有多个user_id.

这可以在一个查询中完成,还是我需要首先循环遍历所有用户,为每个用户然后对其他 3 个表执行 DELETE 查询,然后在循环之后删除所有users?

4

1 回答 1

1

理想情况下,您将使用FOREIGN KEY约束定义事物,并定义一个ON DELETE CASCADE,它会自动为您删除所有相关数据。如果由于某种原因无法做到这一点(例如卡在 MyISAM 表中),您可以简单地JOIN使用相关表(是的,您可以一次从 1 个以上的表中删除)。如果这是您第一次这样做,请在测试数据库上进行,当然不要在生产环境中进行。

于 2013-08-11T20:26:40.633 回答