我正在建立一个小型系统来清理数据库。访问该站点的每个人都被放入数据库,但如果他/她没有注册,他/她应该用cronjob从数据库中删除,如果他/她第一次访问该站点的时间长于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
,因此我可以在脚本开头轻松调整此变量。
但问题是,我还需要对包含此user_id
的其他表进行查询。例如表pages
:
id | user_id | level | time | views
在此表中,可能存在多个user_id
。
这可以在一个查询中完成,还是我需要首先遍历所有用户,然后为每个用户执行3个其他表的DELETE查询,然后在该循环之后删除所有user
个?
答案 0 :(得分:1)
理想情况下,您使用FOREIGN KEY
约束定义事物,并定义ON DELETE CASCADE
,它会自动删除所有相关数据。如果由于某种原因这不可能(例如坚持使用MyISAM表),你可以简单地JOIN
相关表(是的,你可以delete from more then 1 table at once)。如果这是你第一次这样做,那就在测试数据库上做,当然不是在生产中。