eğer bir child kaydın parent_id alanı değişirse yani başka bir kayda alt 
kayıt olarak bağlanırsa eski parent kayıtta bir updat eişlemi olmadığı 
için o kaydın childs_total alanı hatalı sonuç barındıracak, bunun için 
ek kontroller d eyapılabilir ama o zaman da yapılan her update işleminde 
bunu da kontrol ettirmek gerekecek.

uzun uzun recursion dışında bir yol hala aklıma gelmiyor.


Husrev yazmış:
> Timuçin bey,
> 
> belki sorunuza cevap olmayacak ama, sorununuza bir çözüm önerisi olacak : )
> 
> tabloyu
> 
> id
> parent_id
> ad
> kod
> total
> childs_total
> 
> şeklinde yapar da trigger'lar yardımıyla childs_total değerlerini
> güncel tutarsanız sorunununuz çözülür.
> 
> trigger'larla nasıl yapılır dersek; bir UPDATE triggeri icinde
> 
> UPDATE tablo SET childs_total = childs_total + NEW.total WHERE id =
> NEW.parent_id; UPDATE tablo SET childs_total = childs_total -
> OLD.total WHERE id = OLD.parent_id;
> 
> kullanarak yapabilirsiniz. hatta insert'lerde de total 0'dan farklı
> oluyorsa onun için de INSERT triggeri icinde
> 
> UPDATE tablo SET childs_total = childs_total + NEW.total WHERE id =
> NEW.parent_id;
> 
> yapmak yeterli olacaktır gibi gibi : )
> 
> DELETE için yapılması gerekeni de artık hayal edersiniz :)
> 
> Not: Veritabanı sunucuları hakkında detaylı bilgi sahibi olmadığımdan
> Trigger'ların ne kadar verimli/verimsiz olduğu konusunda hiçbir fikrim
> yok. Sadece veritabani sistemleri dersinde ilgimi çeken triggerlar ile
> ilgili birkaç örnek yapmaya çalışırken bir puanlama sistemi için
> benzer birşey düşünmüştüm. Ordan akılmda kalan düzensiz bilgiler ...
> 
> --
> Husrev
> [email protected]

_______________________________________________
Linux-programlama mailing list
[email protected]
https://liste.linux.org.tr/mailman/listinfo/linux-programlama
Liste kurallari: http://liste.linux.org.tr/kurallar.php

Cevap