DB에서 중복된 Wordpress 게시물을 삭제하는 방법
이 코드를 wp_posts 테이블에서 실행하면(ppmyadmin을 사용하여) 중복된 투고가 1개 반환됩니다.
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'
이 게시물은 실제로 중복된 것이 아니라 다른 게시물과 동일한 제목입니다(위의 코드가 중복된 제목을 찾는 일반적인 동작).단, 실제로는 데이터베이스 내에 수백 개의 중복 투고가 있는데(수동으로 보면 알 수 있습니다), 위의 코드를 사용하여 찾을 수 없는 이유는 무엇입니까?
- 워드프레스 관리 패널에서 두 개의 중복된 게시물을 볼 수 있습니다.
- Wordpress 플러그인을 몇 개 사용해보니 모두 위의 코드와 동일한 게시물을 찾았지만 다른 게시물은 없었습니다.)
[Edit] : 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'heure"
post status "publish"
post type "post"
guid "http://www.exemple.com/?p=9462"
감사해요.
내가 문제를 해결할 수 있었던 방법은 다음과 같다.
중복된 게시물들 사이에 제목이 같아 보였지만, 하나는 아포스트로피가 있는 반면 다른 하나는 '를 가지고 있다는 것을 알게 되었다.
그래서 먼저 이 쿼리를 실행하여 몇 개의 게시 제목에 아포스트로피가 있는지 확인했습니다.
SELECT post_title FROM wp_posts WHERE post_title LIKE "%'%",
1825건의 결과가 나왔다.그런 다음 다음 다음 명령을 실행하여 포스트 타이틀의 수를 확인했습니다.
SELECT post_title FROM wp_posts WHERE post_title LIKE "%'%"
720개의 결과를 반환했습니다.그래서 다음 쿼리를 사용하여 모든 '를 아포스트로피로 대체하기로 했습니다.
UPDATE wp_posts SET post_title = REPLACE (post_title, ''', '\'');
그 후 다음을 사용할 수 있었습니다.
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'
572개의 투고가 반환되었습니다.그것은, 다음의 방법으로 간단하게 삭제했습니다.
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'
위의 방법은 느릴 수 있습니다.넌 빅보이 방식으로 할 수 있어
-- 임시 테이블 CREATE TABLE posts_temp_table Like wp_posts를 만듭니다.
-- 제약조건 ALTER TABLE posts_temp_table ADD UNIQURE(YOUR_)를 추가합니다.UNIQURE_FIELD, id);
-- 데이터 INSERT IGNORE INTO posts_temp_table SELECT * FROM wp_posts;
-- 이름 변경 테이블 wp_posts를 old_wp_posts로, posts_temp_table을 wp_posts로, 드롭 테이블을 old_wp_posts로 변경합니다.
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'
언급URL : https://stackoverflow.com/questions/43531980/how-delete-duplicate-wordpress-posts-in-db
'source' 카테고리의 다른 글
Ubuntu 16.04에 php-curl을 설치하는 방법 (0) | 2023.01.02 |
---|---|
Vue3 글로벌 컴포넌트 액세스 (0) | 2023.01.02 |
목록에서 요소의 모든 항목을 찾는 방법 (0) | 2023.01.02 |
비단뱀 판다는 중복된 기둥을 제거한다 (0) | 2022.12.28 |
JavaScript에서 십진수를 16진수로 변환하는 방법 (0) | 2022.12.28 |