Başlık çok anlaşılır değil konuyu biraz açmak istiyorum ,
Şöyle birşeye ihtiyacınız olduğunu düşünün (benim oldu çözüm yolu olarak burada bahsedeceğim yöntemi kullandım) ;
taksit tablonuz olsun burada muhtelif müşterilere ait bir çok taksit var, müşterilerden birisi 1000 TL ödeme yapmak için geldi fakat ilgili müşterinin taksit tablosunda toplamda 1500 TL lik bir çok taksidi var, veritabına yazacağımız minicik bir fonksiyon ile bana hesapkodu şu olan müşterinin toplamda 1000 ye denk gelecek taksitlerini getir desek çok pratik olmaz mı ? elbette uygulama tarafında bu tarz şeyler rahatça yapılabiliyor ama performans açısından yıkabileceğimiz kadar yükü VT ye yıkmak en doğrusudur diye düşünüyorum.
önce fonksiyonumuzu yazalım ,
Kod: Tümünü seç
DELIMITER |
CREATE FUNCTION `fnc_toplam`
(
`ptutar` decimal(12,2)
)
RETURNS decimal(12,2)
BEGIN
SET @fnctoplam = @fnctoplam + ROUND(ptutar,2);
RETURN ROUND(@fnctoplam,2);
END|
DELIMITER ;
Kod: Tümünü seç
tablo adı : taksit
id HesapKodu Vade Tutar Odenen Kalan
-- ------- ---------- ----- ------ -----
1 M001 01/11/2010 100 80 20
2 M001 01/12/2010 100 50 50
3 M001 01/01/2011 100 0 100
4 M001 01/02/2011 100 0 100
5 M001 01/03/2011 100 0 100
6 M001 01/04/2011 100 0 100
Kod: Tümünü seç
//önce global oturum değişkenimizi başlangıç değerini 0 olarak veriyoruz
SET @fnctoplam=0;
//M001 kodlu müşterinin kalan taksit toplamı 270 TL olacak şekilde taksitlerini listeleyecek sorgumuzda aynen şöyle oluyor
SELECT * FROM taksit WHERE HesapKodu="M001" and fnc_toplam( kalan )<=270 ;
Kod: Tümünü seç
tablo adı : taksit
id HesapKodu Vade Tutar Odenen Kalan
-- ------- ---------- ----- ------ -----
1 M001 01/11/2010 100 80 20
2 M001 01/12/2010 100 50 50
3 M001 01/01/2011 100 0 100
4 M001 01/02/2011 100 0 100
Umarım yararlı olur,
İyi çalışmalar.