View Full Version : سوال: نوشتن کوئری like؟
sajadjamalian
سه شنبه 20 مهر 1389, 14:39 عصر
سلام دوستان:
من میخوام یه دستور بنویسم که مثلا یک جمله رو بگیره و توی یه جدول دیتابیس دنبال تک تک کلمات و مشابهات کلمات اون جمله بگرده، کسی میتونه لطف کنه کوئریش رو برام بنویسه؟ ممنون.:چشمک:
AminSobati
سه شنبه 20 مهر 1389, 20:41 عصر
سلام دوست عزیزم،
منظور شما از پیدا کردن مشابه چی هست؟ این کار میتونه بسیار پیچیده باشه، ولی شاید چیزی که در فکر من هست مد نظر شما نیست.
sajadjamalian
سه شنبه 20 مهر 1389, 21:17 عصر
ممنون از توجهتون:
منظورم رو با یک مثال براتون توضیح میدم:
من توی برنامه یه textbox دارم که کاربر میتونه کلمه یا جمله ای رو توی اون وارد کنه، حالا فرض کنید که کاربر جمله "علی به بازار رفت" را درون textbox بنویسد، حالا میخوام توی یه جدولی که توی sql دارم توی یکی از column های اون هر 4تا کلمه این جمله جستجو بشه، مثلا اگه "علی" بود یا "رفت" بود هم توی نتیجه کوئری نشون داده بشه، باید چی کار کنم؟
بازم ممنون.
Reza_Yarahmadi
چهارشنبه 21 مهر 1389, 09:52 صبح
فكر نميكنم با يك دستور اين كار رو انجام داد.
2 روش پيشنهادي براي حلش
روش اول:
دستور SQL رو توي APP با توجه به كلمات بسازيد و اجرا كنيد (چيزي شبيه كد زير)
if (!String.IsNullOrEmpty(textBox1.Text.Trim()))
{
string sqlStr = "Select * From TableName Where ";
foreach (string str in textBox1.Text.Split(new char[] { ' ' }))
sqlStr += "FieldName like %" + str + "% AND ";
sqlStr = sqlStr.Substring(0, sqlStr.Length - 4);
MessageBox.Show(sqlStr);
}
اين روش براي حالتي كه تعداد ركوردها زياد نيست و اندازه متن هاي فيلدها هم زياد نيست مناسبه
روش دوم:
كاري شبيه عملكرد موتورهاي جستجو انجام بديد. يعني اينكه روي تمام كلمات ايندكس گذاري كنيد.
براي اين كار بايد يك جدول ديگه داشته باشيد كه يك فيلدش كلمه ها ذخيره ميشه و توي فيلد ديگه idهاي متنها در جدول اصلي.
به اينصورت كه زمان ذخيره متن به ازا تك تك كلمات كار زير رو انجام بديد:
- توي جدول كمكي كلمه رو جستجو كنيد اگه وجود داشت id متن جديد رو به ليست idها اضافه كنيد اگر هم وجود نداشت به عنوان يك سطر جديد به جدول كمكي اضافه كنيد.
زمان جستجو هم با جستجو روي جدول كمكي ميتونيد ليست idها رو بدست بياريد و از روي اين ليست متن ها رو پيدا كنيد(چون هر فيلد در جدول كمكي يك كلمه رو نشون ميده به راحتي ميتونيد با دستور in ليست رو تهيه كنيد)
اين روش زمان ذخيره كردن متن جديد يك مقدار سربار داره ولي سرعت واكشي رو به مراتب زياد ميكنه(چون توي هر 2 جدول بر اساس فيلدي كه ايندكس گذاري شده است جسجتو ميكنيم)
AminSobati
چهارشنبه 21 مهر 1389, 10:01 صبح
با رضا موافقم، تنها یک کوئری شما رو به هدف نمیرسونه. ولی از امکانات Indexing در Full Text Search هم غافل نشین چون کار رو آسان تر و سریعتر میکنه
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.