ورود

View Full Version : Query گرفتن از یک Query گرفته شده



iranianprogrammers
یک شنبه 20 اسفند 1385, 12:39 عصر
سلام دوستان .
من از دیتابیس DBISAM استفاده میکنم .
من چطوری میتونم از یک Query که قبلا گرفتم یک Query دیگه بگیرم .
توجه داشته باشید که مشکل من فقط با همین کار حل میشه !
از Filter هم نمیتونم استفاده کنم چون میخوام روی Memo های پیدا شده Search کنم .

ghabil
یک شنبه 20 اسفند 1385, 13:09 عصر
جستجو میکردی شاید جواب مبگرفتی اینو نیگا کن (http://barnamenevis.org/forum/showthread.php?t=50460)

iranianprogrammers
یک شنبه 20 اسفند 1385, 13:18 عصر
متاسفانه DBISAM اجازه استفاده از دستور زیر رو نمیده ؟؟ !!!
Select * from (Select * from table where field1=2) where field2=1
نمیدونم باید چیکار کنم !

ghabil
یک شنبه 20 اسفند 1385, 13:29 عصر
همیشه میتونی دیتا رو توی یک ClientDataSet بریزی اطلاعاتت رو و از اطلاعات توش دوباره Query بگیری ، اما حتما راه ساده تر یعنی اینکه با یک Query به نتیجه ای که میخوای برسی وجود داره ، چطوره Queryکه الان نوشتی رو با چیزی که میخوای بسازی رو اینجا بنویسی شاید بتونیم یک کوئری کامل در بیاریم...

iranianprogrammers
یک شنبه 20 اسفند 1385, 13:47 عصر
در ابتدا از کمک شما بسیار سپاسگزارم .
ببینید من یک دیتابیس دارم که توی اون حدود 16000 قصه و داستان وجود داره .
اگه من بخوام روی اون بصورت دستور

select * from story where memo like '%کلمه 1 کلمه2 کلمه3%'
جستجو کنم زمانی حدود 15 ثانیه برای پیدا کردن عبارتها طول میکشه.
اما اگه بیام همین کار رو با استفاده از روش

select * From Story where TEXTSEARCH (' + QuotedStr(Trim(Edit_SearchText.Text) + '*') + ' IN Memo)
انجام بدم چیزی حدود 2 ثانیه هم طول نمیکشه .
اما مسئله ای که هست در روش دوم در اون متن کلمه هایی که در متن جستجو وجود داشته باشه رو تک تک مطابقت میده و اگه هرکدام از کلمات در هر کجای متن وجود داشته اون متن رو به عنوان نتیجه جستجو نمایش میده .
روش دوم خیلی خوبه اما مسئله اینجاست که بعضی مواقع من عین عبارت رو میخوام یعنی همه کلمات مورد جستجو کنار هم باشند
حالا من میخوام ابتدا یه بار با استفاده از روش دوم سریعا متن هایی شرایطی که من میخوام رو دارن رو پیدا کنم و بعد از پیدا کردنشون برای عین عبارت فقط در همون رکورد های پیدا شده جستجو کنم .
ممنون میشم راهنمایی کنید

ghabil
یک شنبه 20 اسفند 1385, 15:24 عصر
برای زمانی که میخوای دقیقا همون باشه از این کلک استفاده کن ، البته نمیدونم چقدر روی DBISAM جوا بده ولی خب تا حد قابل توجهی باید سرچ رو سریع کنه :



select * From Story where TEXTSEARCH (' + QuotedStr(Trim(Edit_SearchText.Text) + '*')
+ ' IN Memo) and ( Memo like QuotedStr('%' + Trim(Edit_SearchText.Text + '%');


تعداد کتیشنها و درستیشون رو خودت چک کن .
انتظار اینه که بخش اول اینقدر نتیجه رو کوچیک کنه که بخش دوم (Like) سریع انجام بشه.

تست کن نتیجش رو بگو

iranianprogrammers
یک شنبه 20 اسفند 1385, 23:29 عصر
مرسی .
تقریبا کمک کرد سرعت تا حدودی بالاتر از قبل بشه.
متشکر .
راستی آیا شنا روش بهتری برای جستجوی سریع رو فیلدهای متنی سراغ ندارید ؟

ghabil
چهارشنبه 23 اسفند 1385, 00:48 صبح
مرسی .
تقریبا کمک کرد سرعت تا حدودی بالاتر از قبل بشه.
متشکر .
راستی آیا شنا روش بهتری برای جستجوی سریع رو فیلدهای متنی سراغ ندارید ؟

روش بهتر از SearchText که نه ، اونم برای این اینقدر سریعه که درخت حروف رو میسازه، و واسه همین هم هست که نمیتونه Phrase رو جستجو کنه ، البته با توجه به اینکه گوگل با همین سرعت وحشتناک سریع Phrase رو هم سرچ میکنه باید یک الگوریتمهای جدیدی باشند ولی من نشنیدم و خبر ندارم.

Sohrab_Tapar
چهارشنبه 23 اسفند 1385, 10:56 صبح
از view استفاده کن