MySQL ilgili kayıtları silme

3 Cevap php

Ben iki MySQL (MyISAM) tabloları vardır:

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

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

Ben ilgili kayıt sonrası "Mesajlar" tablosundan silinir belirli bir yazı, ait "Yorumlar" tablosundaki tüm yorumları silmek istiyorum.

Bu kullanılarak elde edilebilir biliyorum (yabancı anahtarları kurarak) InnoDb ile silin cascaded. Ama PHP kullanarak MyISAM içinde nasıl yapardın?

3 Cevap

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

Senin Yorumlar masa Yorum ait olduğu Yayınla atayan bir alan POSTID vardır varsayarsak.

Hatta uygulanabilir yabancı anahtarları olmadan, silme yapmak için yöntem hala aynıdır. Eğer Yorumlar tabloda post_id gibi bir sütun var varsayarsak

DELETE FROM Comments
 WHERE post_id = [Whatever Id];

DELETE FROM Posts
 WHERE PostID = [Whatever Id];

Ne really MyISAM ile kaybetmek bir işlem olan bu iki sorguları yürütmek için yeteneğidir.

(Eğer> = 5.0 kullanıyorsanız) ben hiç denemedim, ama sen basamaklı siler yapmak için bir tetikleyici kurmak olabilir

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