追記
なぜこのようなことをしたか「そもそも」を忘れてました。
メディアやFTP、ファイルマネージャーで画像を削除した場合に残骸が残っていたので
データベースを整理することからこの件を対応しました。
WordPressの管理画面メディアファイルを見るとからのデータが残っていたのが始まりです。
1:FTP、ファイルマネージャーで削除
2:残骸が気になったらphpMyadminで削除
※FTPよりファイルマネージャーのがすぐに削除できる。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
WordPressで大量の画像を管理していると、不要な画像がだんだんと増えサーバーの容量やデータ数が肥大していきます。
今回データベースをいじる機会があったので無駄な画像を整理しました。
半年か、年に一回のペースで整理するにあたり忘れないように書き留めておきます。
WordPressの過去記事をSQL文を使って一気に削除する方法
記事を一気に削除する=画像を削除するは同じなので初めてのかたはここを見て理解ができます。
例:2017年1月1日以前のデータを消す
DELETE FROM wp_posts WHERE `post_date` < '2017-01-01 00:00:00’
調べるのにまずは画像のデータがデータベースのどこに保存されているか調べました。
■wordpressで画像はどのようにデータベースに記録されているか
post_date 画像をアップロードした日時 2015-02-10 12:07:45
post_parent 親投稿(画像が使われている投稿のID) 1502
guid 画像のパス(URI) https://unskilled.site/wp-content/uploads/2015/02/1139150245147.jpg
post_type 種類 attachment
post_mime_type コンテンツタイプ image/jpeg or image/png
参考になるのをピックアップしましたが、一番需要だったのがattachmentでした。
(何が重要かは各々の目的で異なります。)
データベースの画像はどこ?画像データはpostsにある!
メディアファイル、画像のデータはpostsの中にあることがわかりました。
ここには記事のデータもあるので、画像と記事が混ざって表示されています。
データの削除の仕方:phpMyAdminの使い方 › データの追加と取得
https://www.dbonline.jp/phpmyadmin/data/index4.html
DELETE FROM `personal`.`friend` WHERE `friend`.`id`= 3
初めは1ページに表示された画像を一括選択して一括削除しましたが時間がかかるのと、また同じ手間がでるので
小一時間ほど無心でやって、あ、これできない人だ(my self)と気付きやめました。
で、調べて削除する時にDELETE FROMとか使うそうなのでここから調べました。
【SQL】範囲指定ならコレで決まり!BETWEENでスマートに条件を絞ろう
SELECT * FROM user WHERE create_time BETWEEN ‘2018-01-01 00:00:00’ AND ‘2018-03-01 00:00:00’;
BETEENの後にANDを中間において年月日を書けば良いそうです。
これは何月の画像を全て削除したいとした場合につかいました。
SELECT * FROM `OXg_posts`. WHERE create_time BETWEEN ‘2018-01-01 00:00:00’ AND ‘2018-03-01 00:00:00’;
調べ方:検索で表示してみる
post_type like attachment これで画像のデータを表示します。
post_date BETWEEN (期間の選択) 対象の期間を今回は選択
実行するとどのような使い方をするか表示されれるので参考にします。
「SELECT * 」からはじまるコードがリストの上の方に表示されています。
SELECT * FROM `XXX_posts` WHERE `post_date` BETWEEN ‘2020-04-01 00:00:00.000000’ AND ‘2020-05-01 00:00:00.000000’ AND `post_type` LIKE ‘attachment’ ORDER BY `post_date` DESC
このコードがSQLで実行されているようです。
希望のデータを表示するのにこのコードが使われていると考えれば
削除するときは「SELECT * 」を「DELETE」にすることでできると考えられるので
SQLで下記を実行します
DELETE FROM `XXX_posts` WHERE `post_date` BETWEEN ‘2020-04-01 00:00:00.000000’ AND ‘2020-05-01 00:00:00.000000’ AND `post_type` LIKE ‘attachment’
(XXX_postsはデータベースによって変更する)
これで必要なデータを表示することができます。
一枚の画像をIDで探す
SELECT * FROM `OXg_posts` WHERE `OXg_posts`.`ID` = 503128;
一枚の画像をIDで削除
DELETE FROM `OXg_posts` WHERE `OXg_posts`.`ID` = 503128;
SELECT * FROM `OXg_posts` WHERE `OXg_posts`.`ID` = 503128;