Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
sql like ile birden fazla kelime arama
#1
Arkadaşlar,


ACIKLAMA "2016 DARICA ALI DEPOLAMA VE DOLUM TESISI MALI DENETIM"


Aşağıdaki komut ile içinde depo geçenleri listeliyor.
select * from DOSYALAR WHERE ACIKLAMA like '%depo%'


içinde "2016 depo dolum" gibi de arama yapmak istiyorum nasıl yapabilirim ?
select * from DOSYALAR WHERE ACIKLAMA like '2016 depo'


Teşekkürler
Cevapla
#2
select * from DOSYALAR WHERE ACIKLAMA like '%2016%' and  ACIKLAMA like '%depo%' and  ACIKLAMA like '%dolum%'


icinde 2016 , depo ve dolum kelimeleri gecen kayitlari listeler
WWW
Cevapla
#3
bir açıklama alanı var, edit1.text e ne girdiğini bilemem ki daha kısa bir çözümü olmalı


Teşekkür Ederim.
Cevapla
#4
edite girdigi degeri neden bilemiyorsunuz anlayamadim.

Edite girilen veriler kelime kelime ayrilir , her bir kelime like ile sorgu cumlesine eklenir. baska bir kisayolu var mi ben bilmiyorum.
WWW
Cevapla
#5
(07-05-2018, Saat: 09:19)erdogan Adlı Kullanıcıdan Alıntı: Arkadaşlar,


ACIKLAMA "2016 DARICA ALI DEPOLAMA VE DOLUM TESISI MALI DENETIM"


Aşağıdaki komut ile içinde depo geçenleri listeliyor.
select * from DOSYALAR WHERE ACIKLAMA like '%depo%'


içinde "2016 depo dolum" gibi de arama yapmak istiyorum nasıl yapabilirim ?
select * from DOSYALAR WHERE ACIKLAMA like '2016 depo'


Teşekkürler

Merhaba ,
@sadettinpolat beyin dediği gibi Like and like and diyebilirsin , ama motor olarak Innodb kullanıyor isen Fulltext kullan.

Pardon , ben farklı alanlarda farklı kelimeler aratacaksın sandım. Fulltext bir veya birden fazla texti birden fazla fieldda aramak için uygundur.

Sorunuzun en kolay yolu , @sadettinpolat in cevabında
WWW
Cevapla
#6
Merehaba,
Gerekli açıklamayı @sadettinpolat hocamız yapmış.
Örnek kodda olduğu gibi StringList ten faydalanarak Edit içine yazdığınız kelimeleri ayrıştırabilirsiniz. Delimiter tanımında Boşluk karakteri referans gösterilmiştir. Siz burada farklı bir karakterde kullanabilirsiniz.
Örnek: 8GB+İ7+250GB+23"
şeklinde bir kullanım için, ayrıştırma yapacağımız referans karakterimiz "+" olacaktır.
S.Delimiter     :='+';

 function ArananKelimeler(TAlan,Cumle,and_or:String):string;
 var
   S:TStringList;
   i:Integer;
 begin
   S :=TStringList.Create;
   try
     S.Delimiter     :=' ';    // Kelimeler Boşluk karakterine göre ayrıştırılacaktır.
     S.DelimitedText :=Cumle;  // kelimelere ayrılacak yazımız.
     for I := 0 to s.Count-1 do // Kaç adet kelime var ise döngü ile sorgu cümlemize ekliyoruz
     begin
       if i<>S.Count-1 then // Listedeki son kelime olup olmadığını kontrol ediyoruz.
       Result:=Result+TAlan+' like %'+S.Strings[i]+'% '+and_or+#13#10  //Son kelime değil ise
       else // parametredeki And veya OR ifadesini ekliyoruz.
       Result:=Result+TAlan+' like %'+S.Strings[i]+'% '; // Son kelimemizden sonra AND,OR eklemesi yapmıyoruz.
     end;
   finally
     S.Free; // Hafıza kaçağı olmaması için..
   end;
 end;
Begin
 ShowMessage('Select * From DOSYALAR Where  '+
             ArananKelimeler('ACIKLAMA ',Edit1.Text,'and') );
End;
Cevapla
#7
Evet oldu çok teşekkür ederim.
Cevapla
#8
string replace ile her boşluğu %' and aciklama like '% ile değiştirip sonunada %' eklenedebilir diye düşünüyorum
Topluluk mopluluk yok :/
Cevapla
#9
(07-05-2018, Saat: 11:47)erdogan Adlı Kullanıcıdan Alıntı: Evet oldu çok teşekkür ederim.

@erdogan bey, 
Sorunuza çözüm üreten ve emeği geçen üyelere puan vermeyi untmayın!
Delphi Can'dır!
WWW
Cevapla
#10
(07-05-2018, Saat: 10:56)Cyber Adlı Kullanıcıdan Alıntı: Merehaba,
Gerekli açıklamayı @sadettinpolat hocamız yapmış.
Örnek kodda olduğu gibi StringList ten faydalanarak Edit içine yazdığınız kelimeleri ayrıştırabilirsiniz. Delimiter tanımında Boşluk karakteri referans gösterilmiştir. Siz burada farklı bir karakterde kullanabilirsiniz.
Örnek: 8GB+İ7+250GB+23"
şeklinde bir kullanım için, ayrıştırma yapacağımız referans karakterimiz "+" olacaktır.
S.Delimiter     :='+';

 function ArananKelimeler(TAlan,Cumle,and_or:String):string;
 var
   S:TStringList;
   i:Integer;
 begin
   S :=TStringList.Create;
   try
     S.Delimiter     :=' ';    // Kelimeler Boşluk karakterine göre ayrıştırılacaktır.
     S.DelimitedText :=Cumle;  // kelimelere ayrılacak yazımız.
     for I := 0 to s.Count-1 do // Kaç adet kelime var ise döngü ile sorgu cümlemize ekliyoruz
     begin
       if i<>S.Count-1 then // Listedeki son kelime olup olmadığını kontrol ediyoruz.
       Result:=Result+TAlan+' like %'+S.Strings[i]+'% '+and_or+#13#10  //Son kelime değil ise
       else // parametredeki And veya OR ifadesini ekliyoruz.
       Result:=Result+TAlan+' like %'+S.Strings[i]+'% '; // Son kelimemizden sonra AND,OR eklemesi yapmıyoruz.
     end;
   finally
     S.Free; // Hafıza kaçağı olmaması için..
   end;
 end;
Begin
 ShowMessage('Select * From DOSYALAR Where  '+
             ArananKelimeler('ACIKLAMA ',Edit1.Text,'and') );
End;

Delimiteri aktifleştirmen için;

S.StrictDelimiter := True
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Filede arama deutsch1988 2 136 20-03-2024, Saat: 14:04
Son Yorum: RAD Coder
  Delphi ile Birden Fazla Pdf Dosyasını Birleştirme/Merge Hk. glagher 5 713 08-09-2023, Saat: 10:37
Son Yorum: glagher
  DBGrid de Birden Fazla Kayıt Seçmek. OZCANK 12 3.258 07-07-2023, Saat: 15:31
Son Yorum: emre
  Firebase RealTime birden fazla sütun Yasemin 0 476 26-04-2022, Saat: 21:12
Son Yorum: Yasemin
  Birden fazla tablo ile toplam alma sorunu cvheneburi 2 896 10-04-2022, Saat: 03:17
Son Yorum: cvheneburi



Konuyu Okuyanlar: 1 Ziyaretçi