2014-09-12 1 views
0

내 Wordpress 데이터베이스에서 게시물 및 메타 데이터를 삭제하기위한 2 개의 SQL 쿼리가 있습니다. 이러한 쿼리를 순서대로 실행할 수 있지만 한 번에 전체 작업을 수행 할 수있는 쿼리를 하나 만들고 싶습니다. 메타 키와 값으로하나의 SQL 쿼리로 포스트 메타 및 포스트 삭제

삭제 게시물 :

DELETE wp_posts FROM wp_posts 
INNER JOIN wp_postmeta ON wp_postmeta.post_id = wp_posts.ID 
WHERE (wp_postmeta.meta_key = 'vimport_key' AND wp_postmeta.meta_value = 'some value'); 

이 쿼리는 포스트와 일치하지 않는 wp_postmeta에서 행을 삭제합니다.

DELETE pm 
FROM wp_postmeta pm 
LEFT JOIN wp_posts wp ON wp.ID = pm.post_id 
WHERE wp.ID IS NULL 
+0

아마도 캐스케이드를 살펴볼 것입니까? – Strawberry

답변

1

어느 cascade 옵션 보거나 이렇게 ... 규칙에 따라, 우리는 일반적으로 WHERE 절은 1 테이블을 참조하도록, 원형이 다른 방법을 쓸 것을

DELETE p, pm 
    FROM wp_posts p 
INNER 
    JOIN wp_postmeta pm 
    ON pm.post_id = p.ID 
WHERE pm.meta_key = 'vimport_key' 
    AND pm.meta_value = 'some value'; 

주 , 논리적으로 (그리고 수행 적으로) 똑같습니다 - 똑같은 a * b가 b *와 동일합니다.

+0

답변 해 주셔서 감사합니다. 마지막으로 한 가지가 있습니다. 두 번째 쿼리에서와 같이 게시물의 모든 메타 데이터를 삭제하도록 쿼리를 어떻게 변경합니까? 따라서 선택자로 metakey를 사용하고이 게시물에서 모든 메타 데이터를 삭제하십시오. – Robbert

+0

나는 이해하지 못한다. 이것이 바로 이것이하는 일입니다! 기존 쿼리를 사용해야 할 기존 데이터가있을 수 있지만 그 이후에는 모든 것이 늠름하게 있어야합니다. 내가 오해하고 있다면 적절한 DDL 및/또는 sqlfiddle을 통해 예제를 제공하는 것이 좋습니다. – Strawberry