我正在尝试执行一个查询,该查询从图像表中删除过滤器表中不存在的所有文件。我正在跳过数据库中的 3,500 个最新文件,以便将表“修剪”回过滤器表中的 3,500 +“X”条记录。
filters 表包含文件的标记,以及 images 表中使用的文件 id。
该代码将在 cron 作业上运行。
我的代码:
$sql = mysql_query("SELECT * FROM `images` ORDER BY `id` DESC") or die(mysql_error());
while($row = mysql_fetch_array($sql)){
$id = $row['id'];
$file = $row['url'];
$getId = mysql_query("SELECT `id` FROM `filter` WHERE `img_id` = '".$id."'") or die(mysql_error());
if(mysql_num_rows($getId) == 0){
$IdQue[] = $id;
$FileQue[] = $file;
}
}
for($i=3500; $i<$x; $i++){
mysql_query("DELETE FROM `images` WHERE id='".$IdQue[$i]."' LIMIT 1") or die("line 18".mysql_error());
unlink($FileQue[$i]) or die("file Not deleted");
}
echo ($i-3500)." files deleted.";
输出:0 个文件被删除。
数据库内容:
images table: 10,000 rows
filters table: 63 rows
过滤器表中包含图像表 id 的行数:63 php 脚本的执行时间:4 秒 +/- 0.5 秒
相关数据库结构
- 表:图像
- ID
- 网址
ETC...
表:过滤器
- ID
- img_id(包含来自图像表的 ID)
- ETC...