我是新来的php和英语不是我的妈妈,所以对不起提前!
我正在创建一个php(5.6)脚本,cronjob将在每天凌晨3点调用该脚本,并在许可证过期时删除所有用户的数据(数据库和文件)。大约有10个不同的mysql表和400mb的文件和文件夹。
下面是一个简单的示例(伪代码),介绍了它目前的工作原理:
Select all users whose license expired
While not end of list do
Remove all files and folders from user i
Delete all data from table1 where user = i
Delete all data from table2 where user = i
...
Delete all data from table10 where user = i
Update data from tableUsers where user = i
End While
End Select
每天可能会有10-20个用户来处理数据,所以我正在寻找一种方法来优化这个任务。这种处理有什么好的做法或建议吗?例如,将用户列表到一个数组中,释放查询结果并循环数组会有什么不同?
这是一个理论问题,我不需要代码,只需要想法。所以我可以用新的关键字做更多的研究。
谢谢您!
2条答案
按热度按时间nwlls2ji1#
与许多用户和数据库一起工作的一些技巧是,您可以使用where
IN
条款,文件在这里找到。基本上,您可以找到要删除的内容的所有用户id,并使用'WHERE IN(' . implode( ',', $arrayOfUserIds ) . ')'
这将减少为每个循环调用数据库查询的数量。eiee3dmh2#
将引用表1..10中用户的外键添加到tableusers,并在删除时进行级联更新。
这样,如果从tableusers中删除用户,它将自动从Table1..10中删除。
另外,删除许可证过期的所有用户的所有文件和文件夹,然后运行:
这样,它将在一次查询中删除其许可证过期的所有用户。