2009-07-14 76 views
1

我有两个MySQL(MyISAM数据)表:在MySQL中删除相关记录

Posts: PostID(primary key), post_text, post_date, etc. 

Comments: CommentID(primary key), comment_text, comment_date, etc. 

我想删除在“评论”的所有评论属于特定职位,表的时候相应的后记录被删除来自“帖子”表。

我知道这可以通过使用InnoDB级联删除(通过设置外键)来实现。但是我怎样才能在MyISAM中使用PHP呢?

回答

2
DELETE 
    Posts, 
    Comments 
FROM Posts 
INNER JOIN Comments ON 
    Posts.PostID = Comments.PostID 
WHERE Posts.PostID = $post_id; 

假设您的评论表有一个字段PostID,它指定了评论所属的帖子。

1

即使没有可执行的外键,删除的方法仍然是相同的。假设你在你的评论表

DELETE FROM Comments 
WHERE post_id = [Whatever Id]; 

DELETE FROM Posts 
WHERE PostID = [Whatever Id]; 

有像post_id列什么你真的失去用的MyISAM是一个事务中执行这两个查询的能力。

0

我从来没有尝试过,但你可以设置一个触发做级联删除(如果你使用的是> = 5.0)

DELIMITER $$ 
CREATE TRIGGER Posts_AD AFTER DELETE ON Posts 
FOR EACH ROW 
BEGIN 
    DELETE FROM Comments WHERE post_id = OLD.PostID; 
END $$ 
DELIMITER ; 
+0

它应该工作。好主意。 – 2009-07-14 15:46:05