bunun için trigger yazılması daha sağlıklı olur ama ben sana sorgu ile ağaç yapısını silme olayını basitçe anlatayım, işi öğrendikten sonra trigger yazmayı öğrenmelisin:
şimdi mesela
uyeler tablomuz olsun, bu kişinin ilanları da
ilanlar tablosunda tutulsun. ilanlar tablosunda da uye_id hücremiz olsun ki ilişkiyi sağlayabilelim. hatta bir tablo daha koyalım, atıyorum mesela
mesajlar diye tablo olsun. bunda da uye_id hücresi olsun ilişki sağlansın.
sonuç şu:
- uyeler
> id
> kullanici_adi
> sifre
- ilanlar
> id
> uye_id
> ilan_baslik
- mesajlar
> id
> uye_id
> baslik
> icerik
şimdi biz uyeler tablosundan 1 üye silinince bağlı olduğu diğer tablolardaki kayıtları da silelim. mesela id'si 1 olan üyeyi silelim.
sorgumuz:
Alıntı
SELECT * FROM uyeler u
LEFT JOIN ilanlar i ON i.uye_id = u.id
LEFT JOIN mesajlar m ON m.uye_id = u.id
WHERE u.id = 1
burda dikkat edersen kalın yaptığım yerlerde ilişkiyi uyguladım. bu sorgu çalışınca 1 id'li uyenin kendisi, ilanları ve mesajları bütün halinde listelenir.
silmek için
SELECT * yerine
DELETE u.*, i.*, m.* yazmak yeterli olur.
sonuç:
Alıntı
DELETE u.*, i.*, m.* FROM uyeler u
LEFT JOIN ilanlar i ON i.uye_id = u.id
LEFT JOIN mesajlar m ON m.uye_id = u.id
WHERE u.id = 1
NOT: bu işlemi daha da kısa hale getirebilirsin. sonraki aşama olarak trigger öğren demiştim. triggeri öğrenirken
foreign key metodunu da öğreneceksin.
tablolar arasında ben sorgu ile ilişki kurdum, bunu foreign key ile kısaltabiliyoruz. arkaplanda tabloları bağlıyor, biz sadece DELETE FROM uyeler WHERE id=1 sorgusunu çalıştırıyoruz, o otomatik olarak ilişkili olduğu yerlerden de kayıtları siliyor.
döngü içinde döngü yazarak fuzuli kod yazmış oluyorsun, bu şekilde tek sorgu ile istediğini yapabilmiş olacaksın. anlayamadığın yer olursa sor.