人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ワードプレスの重複タイトルを持つもので、「新しい方」を削除したいと思います。
投稿数が非常に多いので、Delete Duplicate Posts等複数試しましたが、各種プラグインは動きませんでした。

そこでMysqlで直接でも結構なのですが、下記の方法で消すことは出来たのですが、
【投稿日時が新しいもの】を削除し、古い一つは残しておく方法は御座いませんでしょうか。
http://takeshiyako.blogspot.jp/2014/01/wordpressmysqlsql.html

上記で既にそうなっていればいいのですが、宜しくお願い致します。


●質問者: maintour15
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
●100ポイント

参考元のページにある SQL では、重複した投稿の中で、投稿ID が一番小さいものを除外しています。
普通に WordPress の画面から投稿したのであれば、期待通りに、投稿日時が一番古いものが残っていると思います。

何らかの方法で、過去日の投稿を後で追加するような手段を使った場合には、一番小さいID ではなく、一番小さい投稿日時を除外すれば良いと思います。

/* 重複した投稿を探すSQL */

SELECT a.ID, a.post_title, a.post_type, a.post_status
FROM wp_posts AS a
 INNER JOIN (
 SELECT post_title, MIN( post_date ) AS min_date
 FROM wp_posts
 WHERE post_type = 'post'
 AND post_status = 'publish'
 GROUP BY post_title
 HAVING COUNT( * ) > 1
 ) AS b ON b.post_title = a.post_title
AND b.min_date <> a.post_date
AND a.post_type = 'post'
AND a.post_status = 'publish'


/* 重複した投稿を削除するSQL */

DELETE a.*
FROM wp_posts AS a
 INNER JOIN (
 SELECT post_title, MIN( post_date ) AS min_date
 FROM wp_posts
 WHERE post_type = 'post'
 AND post_status = 'publish'
 GROUP BY post_title
 HAVING COUNT( * ) > 1
 ) AS b ON b.post_title = a.post_title
AND b.min_date <> a.post_date
AND a.post_type = 'post'
AND a.post_status = 'publish';

参考:wp_posts テーブルのデータベース構造


maintour15さんのコメント
無事こちらを利用させて頂いているのですが、DELETE a.*のa.*とは何でしょうか。 何か特殊な意味を持つのでしょうか。

a-kuma3さんのコメント
回答した当時のことは覚えてないのですが、以下のようなところを参考にしたんだったかなあと思います。 http://wpkrauts.com/2013/find-and-delete-duplicate-posts-in-wordpress/

maintour15さんのコメント
なるほど、ありがとう御座います!!
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ