2017-04-21 18 views
0

私のwp_postsテーブル(phpmyadminを使用)でこのコードを実行すると、1つの重複投稿が返されます。DB内に重複したWordpress投稿を削除する方法

SELECT a.ID, a.post_title, a.post_type, a.post_status 
FROM wp_posts AS a 
INNER JOIN (
    SELECT post_title, MIN(id) AS min_id 
    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_id <> a.id 
AND a.post_type = 'post' 
AND a.post_status = 'publish' 

この与えられたポストが実際に重複していない、それだけで別の1(重複タイトルのルックス上記のコード与え、正常な動作)と同じタイトルを持つことに注意してください。しかし、問題は、データベースに実際に何百もの重複したポストがあることです(私は手動で見た場合それらを見ることができます)。なぜ、上記のコードを使用してそれらを見つけることができないのですか?

    私もWordPressの管理パネルからそれら二つの重複投稿を見ることができます
  • ...
  • は、私はまた、いくつかのWordpressのプラグインを使用しようとしましたが、それらはすべて、上記のコードと同じ重複記事を見つけましたが、のどれも他人)。

編集:私は2つのランダムな重複を見れば、1があります

ID 9462 
post date 2017-03-07 13:06:31 
post content "foo" 
post title "Les pendules à l'heure" 
post status "publish" 
post type "post" 
guid "http://www.exemple.com/?p=9462" 

他があります。ここ

ID 11409 
post date 2017-03-07 13:06:31 
post content "foo" 
post title "Les pendules à l&#039;heure" 
post status "publish" 
post type "post" 
guid "http://www.exemple.com/?p=9462" 

おかげ

+1

時に手動:私は単に使用して削除され、572件の記事を返さ

SELECT a.ID, a.post_title, a.post_type, a.post_status FROM wp_posts AS a INNER JOIN ( SELECT post_title, MIN(id) AS min_id 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_id <> a.id AND a.post_type = 'post' AND a.post_status = 'publish' 

データベースを見て、post_typeとpost_statusがあなたのクエリに一致していることを確認していますか? –

+0

私は私のポストにいくつかの情報を追加しました。はい、post_typeとpost_statusが一致します。 @lan Kenney – CharleyB0y

+0

@Lan Kenney、申し訳ありません...私は自分の投稿をもう一度編集しました...ブラウザに表示されたときに一致するように見えますが、コードを見ると " '。たぶん私は特殊文字を最初に修正する必要がありますか?どのデータベースをデータベースに保存する必要がありますか? "'"または'? – CharleyB0y

答えて

0

は、私が管理する方法です私の問題を解決する...

タイトルが重複した投稿の間で同じに見えても、一方はアポストロフィを持ち、他方は&#039でした。それは1825の結果を返さ

SELECT post_title FROM wp_posts WHERE post_title LIKE "%'%", 

だから最初に私がどのように多くのポストのタイトルは、アポストロフィを持っていた表示するには、このクエリを実行しました。次に、次のコマンドを実行して、投稿タイトルのうちどれくらいが&#039だったかを確認しました。

SELECT post_title FROM wp_posts WHERE post_title LIKE "%&#039;%" 

結果が720件でした。だから私はすべて&#039を置き換えると思った。アポストロフィで、次のクエリ使用:次に

UPDATE wp_posts SET post_title = REPLACE (post_title, '&#039;', '\''); 

を、私は使用することができた:

DELETE a.* 
FROM wp_posts AS a 
    INNER JOIN (
     SELECT post_title, MIN(id) AS min_id 
     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_id <> a.id 
AND a.post_type = 'post' 
AND a.post_status = 'publish' 
0
Try this 

DELETE a.* 
FROM wp_posts AS a 
    INNER JOIN (
     SELECT post_title, MIN(id) AS min_id 
     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_id <> a.id 
AND a.post_type = 'post' 
AND a.post_status = 'publish' 
+0

それは私がしたいことではありません。私は現在重複を選択することを探しています。 SELECTを使用して重複が返されたら、それらを削除します。 – CharleyB0y