2011-08-20 61 views
3

我有以下MySQL查詢,我正在使用PHP(5.2)。DELETE FROM查詢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表中的所有行/或(我在說「和/或」,因爲它將取決於行是否存在)刪除user_points表中的所有行=> [如果已創建帖子的主題已被刪除()避免混淆它真的只是「隱藏」,我們通過檢查它是否等於1)]來確定這一點)。

希望查詢結構解釋一下自己,topic_id主要用來把JOIN這個表一起。

查詢運行良好(不提供MySQL或PHP錯誤,所以我會假設語法正常?),我已經檢查了DB和所存在的刪除的主題(deleted列設置爲1)和他們的帖子也存在這些主題(所以不是沒有數據的情況)。

感謝所有回覆。

+0

嘗試用'SELECT'替換'DELETE',看看你是否得到你想要刪除的行。 – Vache

+0

@Vache,我剛剛嘗試過,並且它什麼也沒有返回,然後我嘗試刪除user_points部分,它返回了帖子的行,看到的點不存在我認爲這是問題,是他們的任何方式檢查它是否存在於查詢中? – newbtophp

回答

5

我有個人喜好,總是明確指定連接,而不是在where子句中包含所有內容。這也有助於可視化您可能需要左連接的位置。

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 JOIN到LEFT JOIN:

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秒。 –