v2.5.2
Giriş yap

veritabanında 2 tabldan veri silmek

konya
489 defa görüntülendi

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());
Cevap yaz
Cevaplar (4)
abdullahx
1056 gün önce

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.

konya
1053 gün önce

@abdullahx teşekkürler hocam

etukenmez
1056 gün önce

Benim de şahsi yorumum @abdullahx ile aynı olacak ilişki kurulup CASCADE yapılması daha mantıklı geldi.
Kendisi çok detaylı bir şekilde açıklamış.

m100
1057 gün önce

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