2011-08-20 4 views
3

PHP (5.2)에서 사용하고있는 다음 MySQL 쿼리가 있습니다. 나도 그것을하려는거야 방법JOIN이 작동하지 않는 쿼리를 삭제 하시겠습니까?

DELETE t1.*, t3.* FROM 
      forum_posts AS t1, 
      forum_topics AS t2, 
      user_points AS t3 
WHERE t1.topic_id = t2.topic_id 
     AND t2.deleted = 1 
     AND t1.post_id = t3.id 
     AND t3.type = 'post' 
     AND t1.post_author = t3.profile_author 

그러나이 작동하지 않는 것 (! 아무 일도 발생하지 않음), 설명해 보자 : 나는 쿼리를 의도 무엇

이 일을 할 것이 forum_posts 테이블의 모든 행을 삭제하는 것입니다/또는 (심지어 행이 존재하는지에 따라 달라 지므로 "and and or"라고 말합니다.) user_points 테이블의 모든 행을 삭제하십시오. [게시물이 작성된 주제가 삭제 된 경우 (혼란을 피하십시오. 실제로는 "숨김"이며, 우리는 1과 같음을 확인하여 이것을 결정합니다]).

쿼리 구조가 자체적으로 설명하기를 바랍니다. topic_id은 주로 JOIN에 사용됩니다.

쿼리가 잘 실행됩니다 (MySQL 또는 PHP 오류가 없으므로 구문이 좋을 것이라고 생각합니다), 삭제 된 기존의 DB 및 theres 항목을 확인했습니다 (열은 1으로 설정 됨) 그리고 그것들은 그 주제들에 대해서도 존재합니다 (그래서 아무런 데이터도 없다).

모든 답장을 감사하십시오.

+0

'DELETE'을'SELECT'로 바꾸고 삭제할 행이 있는지보십시오. – Vache

+0

@Vache, 방금 시도했는데 아무 것도 반환하지 않고 user_points 부분을 제거해 보았습니다. 게시물에 대한 행을 반환했습니다. 그 점이 존재하지 않는다고 생각합니다. 문제가 있다고 생각합니다. 쿼리 내에 존재하는지 확인하려면? – newbtophp

답변

5

필자는 where 절의 모든 항목을 일괄 처리하지 않고 명시 적으로 조인을 지정하는 개인적인 취향을 가지고 있습니다. 또한 LEFT 조인이 필요한 곳을 시각화하는 데 도움이됩니다.

DELETE forum_posts t1, user_points t3 
    FROM forum_posts AS t1 
    INNER JOIN forum_topics AS t2 ON t2.topic_id = t1.topic_id 
    INNER JOIN user_points AS t3 ON t3.id = t1.post_id 
     AND t3.profile_author = t1.post_author 
     AND t3.type = 'post' 
WHERE t2.deleted = 1 

지금, 당신의 진술에 따라, 나는 두 번째 INNER가 왼쪽으로 가입 변경 좋을 것은 가입 :

DELETE forum_posts t1, user_points t3 
    FROM forum_posts AS t1 
    INNER JOIN forum_topics AS t2 ON t2.topic_id = t1.topic_id 
    LEFT JOIN user_points AS t3 ON t3.id = t1.post_id 
     AND t3.profile_author = t1.post_author 
     AND t3.type = 'post' 
WHERE t2.deleted = 1 

나는 희망이 도움이!

+0

+1 나를 이길 35 초. –

관련 문제