| gkimirti | 20.08.2004 - 17:49:01 |
| bir Haftasonu sorusu sorayım:
bir string alandaki veri birden fazla kelime icersin ben 2 yada daha fazla kelime icin nasıl bir sql yazmalıyım ornegin alan degeri 'gökmen deneme kayıtı' aranacak : kayıt gökmen daha da ileri gidelim kelimelerde de icerenleri bulmaya calıssak yani yukardaki ornek icin aranacak : den gökmen dedigimde bulsun getirsin :) Butun bunlar Firebird icin sorulmustur. Sp,UDF kullanılabilir. | |
| husonet | 21.08.2004 - 00:34:35 |
bir Haftasonu sorusu sorayım:
bir string alandaki veri birden fazla kelime icersin ben 2 yada daha fazla kelime icin nasıl bir sql yazmalıyım ornegin alan degeri 'gökmen deneme kayıtı' aranacak : kayıt gökmen daha da ileri gidelim kelimelerde de icerenleri bulmaya calıssak yani yukardaki ornek icin aranacak : den gökmen dedigimde bulsun getirsin :) Hocam bence bir fonksiyon hazırlayabilirsiniz. Gönderilen değer tabloda bulunamadıysa striglerin yerini değiştirip or parametresi ile SQL imizi genişetip sorgu gönderebiliriz tekrar bulamazsa araya özel karakterler yerleştirmeyi düşünebilirsiniz _ % ama ne kadar performanslı olur bilemiyorum :( Sadece bir fikir. Kolay Gelsin.... | |
| freeman35 | 21.08.2004 - 09:46:02 |
| Bunu delphi de function içinde çok rahat yapabilirsin, sonda bunu UDF olarak kullanırsın :) @Hüsonet in dediği gibide olur ama kelimelerin yerleri farklı olursa yada aranan bir parça ise ve rastgele yerde olabilecekse, FB de bu baya bi takla perende ve çeşitli atraksiyonlar kombinasyonu gerektirir. Ayrıca Yanlış hatırlamıyorsam Like index kullanmaz ve ilk kayıttan son kayıda kadar sırada okuyarak karşılaştırı, ve bunda eğer kayıt sayısı çok ise çok yavaş olur.
Kolay gele | |
| onaydin | 21.08.2004 - 12:01:44 |
| gökmen hocam şimdi sende bunun cevabı da vardır :) | |
| gkimirti | 23.08.2004 - 08:16:48 |
| isin aslı bende bilmiyorum cevabını :)
yani bu olayı str udfleri vs. kullanarak bir sp de yapabiliriz, ama aklıma php sitelerde (mesela forumda) arama ksımları geldi. acaba sql ile yapılabilecek basit bir yolu varmı diye. sanırım orada da php script ile yapılıyor | |
| gkimirti | 24.08.2004 - 14:10:49 |
| ewt dedigim gibi SP ler ile yapılamayacak birsey degil
kendi tablom icin yaptım gayet te iyi calısıyor.. CREATE PROCEDURE ADV_PART_SEARCH (
ARA VARCHAR(20)) RETURNS ( ID INTEGER, ADI VARCHAR(50), PART_NO VARCHAR(20)) AS DECLARE VARIABLE FIRSTREC INTEGER; DECLARE VARIABLE DEG VARCHAR(20) CHARACTER SET WIN1254; DECLARE VARIABLE SQL VARCHAR(200) CHARACTER SET WIN1254; begin firstrec=1; sql='select p.id,p.adi,p.part_no from parts p where (1=1)'; for select deger from p_splitstring(' ',:ARA) into :DEG do begin if (firstrec=1) then sql=sql || ' and (p.adi like '''||:DEG||'%'')'; else sql=sql || ' and (p.adi like ''%' ||:DEG|| '%'')'; firstrec=0; end for execute statement sql into :ID,:ADI,:PART_NO do suspend; end gerekli bir sp ve UDF ler var CREATE PROCEDURE P_SPLITSTRING (
AYIRAC VARCHAR(1), METIN VARCHAR(355)) RETURNS ( DEGER VARCHAR(10)) AS DECLARE VARIABLE P INTEGER; DECLARE VARIABLE SEP VARCHAR(1); begin if (AYIRAC is null) then AYIRAC=' '; --SON KARAKTER AYIRAC DEGILSE AYIRAC EKLENIR if (AYIRAC=' ') then METIN=rtrim(METIN) || ' '; else if (cast(SUBSTR(:METIN,STRLEN(METIN),1) as varchar(1))<>AYIRAC) then METIN=METIN || AYIRAC; select DONEN from POS(:AYIRAC,:METIN) into :P; while(P <> 0) do begin --string ayıklanır DEGER= SUBSTR(:METIN,1,:P-1 ); --ayıklanan string cıkartılır. METIN=SUBSTR(:METIN,:P+1,STRLEN(:METIN)); --ayırac tekrar aranır select DONEN from POS(:AYIRAC,:METIN) into :P; suspend; end end mesela ornek bir arama 'KA KONT PA' sonuc 'KASA KONTROL PANOSU' olay bundan ibaret:) | |
| husonet | 24.08.2004 - 14:18:38 |
| Elinize Sağlık Hocam bunu Makale ve İpucu kısmına da atarsanız güzel olur. | |
| gkimirti | 24.08.2004 - 14:30:57 |
| aklımda olsun bos bir anımda duzenleyip ornek bir tablo ile makaleleştiririm | |
| ASE | 11.12.2004 - 13:37:52 |
| Arkadaşlar merhaba. Uzun zamandır aranızda yokum. Malum Askerdeyim. Ama burda da duramadım bir progrm yapmaya başladım. Lakin Tam burda takıldım.
peki sp desteklemeyen bir veritabanında bunu nasıl yaparız. Örn. Accesc Yani alandaki kelimelerin herhengi biri ile nasıl arama yaparız. | |
| gkimirti | 11.12.2004 - 14:33:11 |
| sorgu kelimesini bosluk karakterine göre parcalayacaksın once
sonra gerekli sql cumlesini olusturacaksın delphi tatafında ben sana sp ile yaptıgımı gondereyim sqlstr='select x.id,x.parcaadi, X.newprice '|| 'from tablom X where (1=1)'; for select q from p_splitstring(' ',:PARCAENG) into :DEG do sqlstr=sqlstr || ' and (x.parcaadi like ''%'||:DEG||'%'')'; sqlstr=sqlstr || ' order by x.parcaadi'; p_splitstring adından da anlasılacagı uzere string parcalayan bir sp her string degerini DEG degiskenine aktarıyor her bir string icin and ile birbirine ekli where cumlesini olusturuyoruz olay bu kadar basit yani.... | |