2014-04-12 19 views
0

我想從content表中刪除文章,然後同時從comments表中刪除相關評論表,即刪除這些文章。通過使用join語句從兩個表中刪除,但出現錯誤

我已創建以下查詢:

$sql = "DELETE FROM content JOIN comments ON content.id = comments.content_id WHERE content.delete_time < UNIX_TIMESTAMP()"; 
$this->db->query($sql); 

但我有此錯誤:

Error Number: 1064 
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'JOIN comments ON content.id = comments.content_id WHERE delete_time < UNIX_TIMES' at line 1 

DELETE FROM content JOIN comments ON content.id = comments.content_id WHERE delete_time < UNIX_TIMESTAMP() 

什麼是錯在前面的查詢?

回答

2

最好的建議是從(上刪除無動作)更新SQL FK到(上刪除級聯),將刪除所有相關行通過SQL數據庫只有:

DELETE FROM tblContent WHERE條款ArticleID ='givenArticleID';

這將處理數據庫中的所有相關行。

另一種方法是先刪除相關然後刪除父親一個。

+0

我沒有這些文章的標識,該查詢將刪除所有過期的文章。我想同時刪除與每篇文章相關的評論。 –

+1

重新設計你的桌子,讓每個人都有'id'(自動增量)使用伊斯蘭教的答案。並確保您正在運行innoDB引擎(由於密鑰)。 – Kyslik

0

您沒有使用正確的語法爲加盟刪除查詢

DELETE content.*,comments.* 
FROM content 
INNER JOIN comments ON content.id = comments.content_id 
WHERE content.delete_time < UNIX_TIMESTAMP() 

這樣你可以刪除你的內容表中的行以及與其中delete_time小於UNIX_TIMESTAMP每個內容行() ,但要確保您首先在演示數據上不直接對生產數據測試查詢

+0

謝謝,您的查詢在刪除每篇文章及其評論時效果不錯,但在刪除所有過期文章時效果不佳。不幸的是,它刪除了一些過期的文章,而不是所有過期的文章 –

+0

由於沒有數據集測試我不能說任何可能的話可以提供樣本數據集示例使用http://sqlfiddle.com/和alsomg數據設置爲被刪除,用一些測試數據來分析它會很好 –

相關問題