butun terimler icin arama sorgusu
gkimirti20.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 Question
dedigimde bulsun getirsin :)

Butun bunlar Firebird icin sorulmustur.
Sp,UDF kullanılabilir.
 
husonet21.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 Question
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....
 
freeman3521.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
 
onaydin21.08.2004 - 12:01:44
gökmen hocam şimdi sende bunun cevabı da vardır :)
 
gkimirti23.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
 
gkimirti24.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:)
 
husonet24.08.2004 - 14:18:38
Elinize Sağlık Hocam bunu Makale ve İpucu kısmına da atarsanız güzel olur.
 
gkimirti24.08.2004 - 14:30:57
aklımda olsun bos bir anımda duzenleyip ornek bir tablo ile makaleleştiririm
 
ASE11.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.
 
gkimirti11.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....
 
NOT : Bu sayfa google'un siteyi indekslemesi içindir. www.delphiturkiye.com/forum/ adresini kullanınız!
1998-2006 www.delphiturkiye.com