2009-07-14 9 views
1

J'ai deux tables MySQL (MyISAM):Suppression d'enregistrements connexes dans MySQL

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

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

Je veux supprimer tous les commentaires dans le tableau « Commentaires » appartenant à un poste particulier, lorsque l'enregistrement de poste correspondant est supprimé à partir du tableau "Posts". Je sais que cela peut être réalisé en utilisant la suppression en cascade avec InnoDB (en mettant en place des clés étrangères). Mais comment le ferais-je dans MyISAM en utilisant PHP?

Répondre

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

En supposant que votre table Commentaires a un champ PostID, qui désigne le message auquel appartient un commentaire.

1

Même sans clés étrangères exécutables, la méthode pour effectuer la suppression est toujours la même. En supposant que vous avez une colonne comme post_id dans votre table Commentaires

DELETE FROM Comments 
WHERE post_id = [Whatever Id]; 

DELETE FROM Posts 
WHERE PostID = [Whatever Id]; 

Ce que vous vraiment perdre avec MyISAM est la capacité d'exécuter ces deux requêtes dans une transaction.

0

Je ne l'ai jamais essayé, mais vous pouvez configurer un déclencheur pour faire les suppressions en cascade (si vous utilisez> = 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

Il devrait fonctionner. Bonne idée. –

Questions connexes