[SORU]-SQL Sorgulamada Fazla Kriter Kullanma ?
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- hi_selamlar
- Üye
- Mesajlar: 523
- Kayıt: 05 May 2005 03:24
- Konum: DelphiTürkiye.COM
[SORU]-SQL Sorgulamada Fazla Kriter Kullanma ?
S.A. Arkadaşlar,
Öncelikle bütün arkadaşların geçmiş ramazan bayramını kutlar, esenlikler dilerim.
Sorum ise şu?
Bir DB'de SQL (MySQL) kullanarak bazı verileri çekmek istiyorum. Kullanıcı bu verilerin hepsine göre veya bir kısmına göre sorgulamak istiyor.
Örneğin;
ADI, SOYADI, D.TARIHI, SEMT, IL, BABA ADI, VN, VD, TCNO , vs.vs.vs.vs.vs.gibi 15-20 kriter olacak.
Kullanıcı örneğin sadece ADI na göre veya hem ADI hemde İL le göre arama veya daha fazla kritere göre sorgulama yapacak.
Ben ise burda takıldım. Şimdi SQL de where ye bütün kriterleri yazıp ara dediğimde kayıtları bulamıyor. Çünkü kullanıcı bazı kriterleri boş geçiyor. Diğer türlü kullanıcının hangi alanlara göre arama yapmak istediğini bulmam biraz zorluyor beni.
Siz bu durumda bana n önerirsiniz. Sizler bu tarz durumlarda nasıl bir yol ve yöntem izliyorsunuz ?
Sevgiler, Saygılar..
S.A.
Öncelikle bütün arkadaşların geçmiş ramazan bayramını kutlar, esenlikler dilerim.
Sorum ise şu?
Bir DB'de SQL (MySQL) kullanarak bazı verileri çekmek istiyorum. Kullanıcı bu verilerin hepsine göre veya bir kısmına göre sorgulamak istiyor.
Örneğin;
ADI, SOYADI, D.TARIHI, SEMT, IL, BABA ADI, VN, VD, TCNO , vs.vs.vs.vs.vs.gibi 15-20 kriter olacak.
Kullanıcı örneğin sadece ADI na göre veya hem ADI hemde İL le göre arama veya daha fazla kritere göre sorgulama yapacak.
Ben ise burda takıldım. Şimdi SQL de where ye bütün kriterleri yazıp ara dediğimde kayıtları bulamıyor. Çünkü kullanıcı bazı kriterleri boş geçiyor. Diğer türlü kullanıcının hangi alanlara göre arama yapmak istediğini bulmam biraz zorluyor beni.
Siz bu durumda bana n önerirsiniz. Sizler bu tarz durumlarda nasıl bir yol ve yöntem izliyorsunuz ?
Sevgiler, Saygılar..
S.A.
Herkes cahildir, bazi konularda.
Re: [SORU]-SQL Sorgulamada Fazla Kriter Kullanma ?
1-Önce select yapmak istediğin cümleyi yazın, sonuna where 1=1 koyun
2-daha sonra sorgulama kriterlerini belirleyeceğin edit,combobox,checkbox vs. bunların dolu veya boş olmalarına göre query'ini şekillendir.
Bu şekilde tüm kriterlerine göre queryni şekillendirip en son satırda query yi çalıştırmalısın
Kolay gelsin...
Kod: Tümünü seç
select * from tablo where 1=1
Kod: Tümünü seç
if adi.text<>'' then
begin
query.sql.add('and adi=:adi');
query.params['adi'].asstring:=adi.text;
end;
Kolay gelsin...
Re: [SORU]-SQL Sorgulamada Fazla Kriter Kullanma ?
dexpress kullanıyorsanız filter nesnesi var, sizin için sql'i otomatik hazırlayabilir.
- hi_selamlar
- Üye
- Mesajlar: 523
- Kayıt: 05 May 2005 03:24
- Konum: DelphiTürkiye.COM
Re: [SORU]-SQL Sorgulamada Fazla Kriter Kullanma ?
S.A.bgoktas yazdı:1-Önce select yapmak istediğin cümleyi yazın, sonuna where 1=1 koyun2-daha sonra sorgulama kriterlerini belirleyeceğin edit,combobox,checkbox vs. bunların dolu veya boş olmalarına göre query'ini şekillendir.Kod: Tümünü seç
select * from tablo where 1=1
Bu şekilde tüm kriterlerine göre queryni şekillendirip en son satırda query yi çalıştırmalısınKod: Tümünü seç
if adi.text<>'' then begin query.sql.add('and adi=:adi'); query.params['adi'].asstring:=adi.text; end;
Kolay gelsin...
Hocam Where 1=1 anlamı nedir?
Bende 2. yöntemi kullanıyorum. Fakat kontrol etmesi daha basit bir yöntem olabilirmi, varmı acaba diye
siz değerli arkadaşlarımızdan destek istedim.
S.A.
Herkes cahildir, bazi konularda.
Re: [SORU]-SQL Sorgulamada Fazla Kriter Kullanma ?
where 1=1 'i demezsen her kriter sorgulamasının başında, daha önceki kriterler sorguya eklendimi eklenmedimi diye sorgulaman gerekiyor eğer sorgulanmamışsa eğer daha önce kriter eklendiyse demen gerekiyor. where 1=1 diyerek her defasında and'le başlamayı garantilemiş oluyorsun.
Kolay gelsin.
Kod: Tümünü seç
where sorgun...
Kod: Tümünü seç
and sorgun...
Kolay gelsin.
Re: [SORU]-SQL Sorgulamada Fazla Kriter Kullanma ?
where 1=1 deki amaç and bağlacı atandı mı atanmadımı kontrolünü yapmaktan kurtulmak içindir.hi_selamlar yazdı:S.A.bgoktas yazdı:1-Önce select yapmak istediğin cümleyi yazın, sonuna where 1=1 koyun2-daha sonra sorgulama kriterlerini belirleyeceğin edit,combobox,checkbox vs. bunların dolu veya boş olmalarına göre query'ini şekillendir.Kod: Tümünü seç
select * from tablo where 1=1
Bu şekilde tüm kriterlerine göre queryni şekillendirip en son satırda query yi çalıştırmalısınKod: Tümünü seç
if adi.text<>'' then begin query.sql.add('and adi=:adi'); query.params['adi'].asstring:=adi.text; end;
Kolay gelsin...
Hocam Where 1=1 anlamı nedir?
Bende 2. yöntemi kullanıyorum. Fakat kontrol etmesi daha basit bir yöntem olabilirmi, varmı acaba diye
siz değerli arkadaşlarımızdan destek istedim.
S.A.
2. yöntem yerine
Kod: Tümünü seç
'...... and kayit_adi like ''%'+edit[n].text+'%'''
Kod: Tümünü seç
'...... and kayit_adi like :kayit_adi'
query.parambyname('kayit_adi').AsString:='%'+edit[n].text+'%'
kolay gelsin.
- hi_selamlar
- Üye
- Mesajlar: 523
- Kayıt: 05 May 2005 03:24
- Konum: DelphiTürkiye.COM
Re: [SORU]-SQL Sorgulamada Fazla Kriter Kullanma ?
Hocam rica etsem bir kod örneği ile verirmisin ?Lost Soul yazdı: where 1=1 deki amaç and bağlacı atandı mı atanmadımı kontrolünü yapmaktan kurtulmak içindir.
kolay gelsin.
Örneğin ;
bu örnekte nasıl olması Where 1=1 ??
Kod: Tümünü seç
SELECT *FROM TABLO
WHERE (ADI=:ADI) AND (SOUADI=:SOYADI) AND (SEMT=:SEMT)
Herkes cahildir, bazi konularda.
Re: [SORU]-SQL Sorgulamada Fazla Kriter Kullanma ?
where 1=1 dinamik parametreli sorgulara kolaylık sğalaması için kullanılır.hi_selamlar yazdı:Lost Soul yazdı:Teşekkürler...Kod: Tümünü seç
SELECT *FROM TABLO WHERE (ADI=:ADI) AND (SOYADI=:SOYADI) AND (SEMT=:SEMT)
where 1=1 in anlamı 1; 1'e eşitse demektir ki bu da her zaman true değer döndüreceğinden
Kod: Tümünü seç
select * from tablo
Kod: Tümünü seç
select * from tablo where 1453=1453
fakat örneğin çalışma anında sorgu üreteceğimiz zaman değişken parametre sayısına sahip sorgularımı olacaktır.
örneğin yukarıdaki örnek sorgunuzda hem AD hem SOYAD hem de SEMT için aynı anda sorgu yapacaksanız olduğu gibi yazarsınız.
Peki kimi zaman AD kimi zaman soyad kimi zaman Ad,Soyad ya da Soyad,Semt için soru yaparsanız nolacak.
o zaman and bağlaçlarını koyup koymayacağınıza nasıl karar vereceksiniz.
ya boolean cinsinden bir değer tutup eğer where bir kez kullanılmışsa and ekle yoksa where ekle diyeceksiniz.
Ex:
Kod: Tümünü seç
if WhereKondu then sorgu := sorgu + ' and [şart]...'
en başa where 1=1 gibi her zaman doğru olan bir şart koyup
gerektikçe şartlarınızı and ,or gibi bağlaçlar ile ile eklemeye devam edeceksiniz.
Re: [SORU]-SQL Sorgulamada Fazla Kriter Kullanma ?
Merhaba.
Özetle sorgunu şöyle kur..
Eğer parametre kullanacaksan, aynı if sorgularını aşağıda aynı sırayla her satıra ait parametresi için kuracaksın.
Özetle sorgunu şöyle kur..
Kod: Tümünü seç
With MySQL do begin
SQL.Clear;
SQL.Add( 'SELECT * FROM TABLO' );
SQL.Add( 'WHERE 1=1' );
If StrAdi <> '' then SQL.Add('AND ADI = '+ QuotedStr(StrAdi) );
If StrSemt <> '' then SQL.Add('AND SEMT = '+ QuotedStr(StrSemt) );
...
...
Active := True;
end;
Re: [SORU]-SQL Sorgulamada Fazla Kriter Kullanma ?
ve aleyna aleykum selam...
eger kullanici yalnizca isim girerse parametreler sirasi ile söyle olacak
ve like komutu ile ismi ahmet (ve yakin isim) olanlari alacak ve diger kriterler %% döndügü icin onlari es gececektir.
eger kullanici isim ve soy isim girerse parametreler sirasi ile söyle olacak
ve like komutu ile ismi ahmet (ve yakin isim) olanlari ve soy ismi bayramoglu (ve yakin isim) olanlari alacak ve son kriter %% döndügü icin o'nu es gececektir.
kolay gelsin!
Kod: Tümünü seç
select alanlar from tablo where kriter1 like :kriter1 and kriter2 like :kriter2 and kriter3 like :kriter3
parambyname('kriter1').asstring := '%'+trim(isim.text)+'%';
parambyname('kriter2').asstring := '%'+trim(soyisim.text)+'%';
parambyname('memleket').asstring := '%'+trim(memleket.text)+'%';
Kod: Tümünü seç
kriter1 = %ahmet%
kriter2 = %%
kriter3 = %%
eger kullanici isim ve soy isim girerse parametreler sirasi ile söyle olacak
Kod: Tümünü seç
kriter1 = %ahmet%
kriter2 = %bayramoglu%
kriter3 = %%
kolay gelsin!
kıdemsiz üye
Re: [SORU]-SQL Sorgulamada Fazla Kriter Kullanma ?
Birden çok kriter sorgulamasında like ile % joker sembolü ile kullanılırsa kolay kolay boşa düşmez. Yanlışlıkla arama kriterlerinden birine bir boşluk eklersen ve kayıtlarda içinde boşluk olan kayıtlar da gelir. Bu nedenle eğer like kullanmayı düşünüyorsan mümkün olduğunca arancak terimlri trim() fonksiyonundan geçirip sağ ve soldaki boşlukların temizlenmesini ihmal etme.
Re: [SORU]-SQL Sorgulamada Fazla Kriter Kullanma ?
Kod: Tümünü seç
procedure Tform1.Sorgula;
var
str_where : string; // where de kullanacagımız değer
procedure sorgu_str(alanadi, deger: string);
begin
if deger <>'' then
begin
if str_where <> '' then str_where:=str_where+' and ';
str_where:=str_where+' alanadi = '+quotedstr(deger);
end;
end;
Kod: Tümünü seç
procedure sorgu_int(alanadi: string; deger: integer);
begin
if deger > 0 then
begin
if str_where <> '' then str_where:=str_where+' and ';
str_where:=str_where+' alanadi = '+IntToStr(deger);
end;
end;
Kod: Tümünü seç
begin
dataset1.Close;
str_where:=''; // where için kullanacagımız değişkeni sıfırlıyoruz.
sorgu_str('adi',Edit1.Text); // adi veritabanindaki field , edit1.text girilen ad
sorgu_str('sehir',Edit2.Text);
sorgu_int('turu',combobox1.itemindex); // tur integer bir alan ve combobox1 de turler var. itemindex 0 gözardı edilecektir.
..... // istedigin kadar sorgulanacak alan ekle
dataset1.selectsql.clear;
dataset1.selectsql.add(' select * from tablo ');
if str_where <> '' then dataset1.selectsql.add(str_where);
dataset1.Open;
end;