veritabanında 2 tabldan veri silmek
merhabalar benim birbiri ile ilişkili 3 tablom var aslında ama karıştırmamak için 2 tablodan silmek ilk önceliğim
dersler tablosu olsun
id isim sonuc
48 hakan 1
49 hasan 2
yorumlar tablosu olsun
id dersid
1 48
2 49
ben burda istiyorum ki dersler tablosunda sonucu 2 ise silsin id eşitse dersid yorumlar tablosundan 2. id de silsin
scriptte ki kodlama yapısı sorgular aşağıdaki gibi yapılmış
$Sil = DB::exec('DELETE FROM dersler WHERE sonuc=2',array());
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (4)
Bunun en temiz tarafı ne biliyor musun, bunu direkt olarak sql tarafında halletmek, ya bir foreign key yazacaksın ya da trigger oluşturacaksın.
Foreign key için yapman gereken adımlar: phpmyadmin'den (muhtemelen onu kullanıyorsundur) yorumlar tablosunu açıyorsun, Yapı sekmesine tıklıyorsun, ardından ilişki görünümü, ON DELETE ve ON UPDATE açılır menüsünden ikisinde de CASCADE seçeneğini seçiyorsun. Sağda sütun olarak dersid
seçiyorsun, onun sağında database seçilidir değilse database seçiyorsun, onun sağında tablo seçeneğinden dersler
i seçiyorsun, onun da sağında yani en sondaki sütun olarak da dersler tablosundaki id değerini seçiyorsun.
Yani yaptığımız olay kısaca şu şekilde, dersler tablosundaki bir sütunda silme veya değişiklik işlemi yapıldığında o sütunun yorumlar tablosundaki dersid değerine sahip sütunda da aynı olay yapılsın. CASCADE yapmamız bundan ötürü. Böylece veritabanı bütünlüğün korunmuş olur, PHP tarafında meydana gelebilecek hatalardan bağımsız olarak sorunsuz bir şekilde ekstra bir koda ihtiyaç olmadan çalışacaktır.
Diğer yöntem ise TRIGGER eklemek. Şöyle ki bir tabloda bir UPDATE,DELETE,INSERT işlemi yapıldığında Mysql tarafından otomatik bazı kodları yürütmeyi sağlar.
Senin örnekte dersler tablosundan bir sütun silindiği zaman yorumlar tablosundan o sütunun id değerine sahip sütunları silmek için şöyle bir trigger kodu oluşturabilirsin. Bu kodları SQL sekmesine yazman gerekiyor.
DELIMITER $$
CREATE TRIGGER trigger_ismi AFTER DELETE
ON dersler
FOR EACH ROW
BEGIN
DELETE FROM yorumlar WHERE dersid = OLD.id;
END$$
DELIMITER ;
Trigger hakkında daha detaylı bilgiye buradan ulaşabilirsin.
birden fazla tabloda işlem yapmak istiyorsan daha önceden bir soruya verdiğim cevabı şöyle bırakıyım yardımcı olur belki
https://prototurk.com/cevap/3595