MySQL'de Kullanıcı Tanımlı Fonksiyonla Sınırlandırma Yapmak

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

MySQL'de Kullanıcı Tanımlı Fonksiyonla Sınırlandırma Yapmak

Mesaj gönderen vkamadan »

Merhaba değerli dostlar ,
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 ;
dikkat ederseniz @fnctoplam adında sadece bizim oturmuzdan erişilebilen global bir değişken kullandık, şimdi aşağıdaki gibi bir tablomuz olsun ,

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

yukarıda yazdığımız fonksiyonu kullanarak şöyle bir komut verirsek,

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 ;
sorgu sonucunda aşağıdaki tabloyla karşılaşıyoruz ;

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.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: MySQL'de Kullanıcı Tanımlı Fonksiyonla Sınırlandırma Yap

Mesaj gönderen conari »

Volkan Selam,
Yazında
//M001 kodlu müşterinin kalan taksit toplamı 270 TL olacak şekilde taksitlerini listeleyecek sorgumuzda aynen şöyle oluyor

"Kalan taksit" hatalı oldu sanırım. çünkü belirtilen tutardaki ilk taksitler getiriliyor.

Birde 270 sende tam denk geliyor, 280 desen idi ne olacaktı? 5. satır da mı ilave edilecekti.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: MySQL'de Kullanıcı Tanımlı Fonksiyonla Sınırlandırma Yap

Mesaj gönderen vkamadan »

conari yazdı: "Kalan taksit" hatalı oldu sanırım. çünkü belirtilen tutardaki ilk taksitler getiriliyor.
Birde 270 sende tam denk geliyor, 280 desen idi ne olacaktı? 5. satır da mı ilave edilecekti.
Merhabalar ,
fonksiyonunu kullanımına ilişkin verdiğim örnekte demek istediğim "taksit" isimli tablodaki "kalan" isimli alanın toplam değeri 270 e eşit yada 270 den küçük olma şartı kaydı devam ettiği sürece kayıtları listele, yani eğer siz 280 deseydiniz benim verdiğim örnek kayıtlara göre 270 dediğimde gelen kayıtların aynısı gelecekti çünkü bir sonraki satırıda topladığında 370 edecekti toplam ve şartı sağlamadığı için 280 i aşan kayıtlar dahil edilmeyecekti, aslında bu çok düşünmeden ortaya salladığım basit bir örnekti kullanım alanları tartışılır, eğer MySQL de LIMIT deyimi olmasaydı fnc_toplam(1)<=10 diyerek sorguda 10 adet kaydın gelmesini sağlayabilirdik, hatta limit ile yapamayacağımız sorgu içinde oluşacak şarta bağlı kayıt sınırlandırmalarınıda yapabiliriz atıyorum falanca alan şu değerdeyse 20 kayıt getir şu değerdeyse 30 kayıt göster gibi vb...

kolay gelsin..
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: MySQL'de Kullanıcı Tanımlı Fonksiyonla Sınırlandırma Yap

Mesaj gönderen conari »

eyv.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Cevapla