フィルタテーブルに存在しない画像テーブルからすべてのファイルを削除するクエリを実行しようとしています。テーブルを「トリム」してフィルターテーブルのレコード数を3,500+「X」に戻すために、データベース内の最新のファイルを3,500スキップしています。
フィルタテーブルには、ファイルのマーカーと、画像テーブルで使用されるファイル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秒
関連するDB構造
- 表:画像
- id
- url
等...
表:フィルター
- id
- img_id(画像テーブルからのIDを含む)
- 等...