PDA

View Full Version : مشکل با عملگر Like



sh
جمعه 23 بهمن 1383, 12:15 عصر
سلام دوستان

در یه دیتابیس دیکشنری ما یه سری جمله داریم به ترتیب ذیل

زن ,زنبیل, زنبور

وقتی ازاین عملگر برای جستجوی کلمه زن استفاده میکنم همه این کلمات را جسجو میکند

توجه داشته باشید که یه فیلد جملات انگلیسی هست و یه فیلد حاوی چندین کلمه معادل فارسی که با علامت کاما از هم جا شده اند و باید از Like استفاده کرد چون من تست کردن شرط تساوی کامل درست نشد یعنی نشد که بگیم

Where farsiword= textbox1.text

حالا راه حل چیه که صرفا خود کلمه رو بیاره

زبان برنامه نویسی هم VB.NET هست بانک هم اکسس 2003

M.GhanaatPisheh
جمعه 23 بهمن 1383, 14:25 عصر
اگر با بانک ACCESSکار می کنید چرا تو این بخش پست زدید؟

اگر خود کلمه فارسی توی TextBoxرو میخواید چرا از Like استفاده می کنید ؟ برقراری تساوی شرط درستیه دوست من.

Query که نوشتید اینجا Post بزنید ببینیم اشکال چیه.

sh
جمعه 23 بهمن 1383, 17:28 عصر
1- چون مسئله مربوط به دستور SQL بود جائی بهتر از اینجا ندیدم

2 - ببین شرط تساوی زمانی صدق میکنه که مقدار فیلد دقیقا برابر مقدار TextBox باشه در صوتی که من گفتم مقدار فیلد تشکیل شده از تعداد زیادی کلمات که ما میخواهیم صرفا دنبال یکی از کلمات درون فیلد باشیم
امیدوارم منظورم رو فهمیده باشین

در ازای هر فیلد که حاوی یک کلمه انگلیسی هست یه فیلد حاوی چند کلمه فارسی هست

AminSobati
جمعه 23 بهمن 1383, 18:53 عصر
شهریار جان،
متوجه هدف شما شدم!.. شما اون چند کلمه فارسی رو به عنوان Keyword برای Search استفاده میکنین ولی ضعف ساختار فعلیه دیتابیس در اینه که از ایندکس برای افزایش سرعت جستجو نمیتونین استفاده کنین.
لذا هر بار که Query انجام بشه، SQL Server ناچارا تمام جدول رو Scan میکنه تا رکوردهای مورد نظر پیدا بشه. پس هر چقدر تعداد رکوردها شما بیشتر بشه، عمل Table Scan و در نتیجه Query کندتر خواهد بود.
برای رفع این مشکل، میبایست یک جدول دیگه درست کنین که این Keyword ها در اون خرد شده باشند ولی با یک ID به جدول اصلی مرتبط باشند. یعنی این جدول جدید میتونه فقط دو فیلد داشته باشه: یکی کلمه یا همون Keyword و دیگری یک ID که به جدول اصلی اشاره میکنه. پس به عنوان مثال اگر یک رکورد در جدول اصلی، دارای سه Keyword باشه، در جدول جدید سه رکورد به خودش اختصاص میده. حالا شما میتونین روی فیلد Keyword یک ایندکس بسازین و در Query هم به جای Like (که کنده) از علامت = استفاده کنین.
به این صورت، Query شما بسیار سریع خواهد بود و داشتن صدها هزار رکورد هم برای شما مشکلی نیست.
موفق باشید

sh
جمعه 23 بهمن 1383, 23:06 عصر
امین جان سلام

با این حساب من باید تک تک کلمات فارسی را در یک رکود در جدولی دیگر ذخیره کنم و با یک کلید به معادلهای انکلیسی آن در جدول دیگر ارتباط مرتبط کنم

درسته ؟

AminSobati
جمعه 23 بهمن 1383, 23:29 عصر
کاملا!

محمد حسین صمدیان
دوشنبه 26 بهمن 1383, 03:28 صبح
دوست خوبمون خوب راهنمایی کردن شما در ER یک رابطه M به N دارید و سه تا جدول برای کار شما جوابگوست تا Data Redancy هم نداشته باشید. end شه بابا!!!!
[img]