PDA

View Full Version : مشکل با جستجو توسط دستور Like



nazaninam
پنج شنبه 19 مهر 1386, 21:39 عصر
سلام
وقتی از دستور Like به همراه % برای جستجو استفاده میشه ، همه رکورد هایی که حروف جستجو شده را شامل می شوند بازگردانده میشوند .
به عنوان مثال جمله : hello dear programmer را در نظر بگیرید
اگر دستور like به صورت



like '%'+@Param+'%'



نوشته بشه حتی اگر pr سرچ کنیم هم رکورد را بر می گردونه ، من میخواهم فقط در صورتی که programmer جستجو شد رکورد برگرده برای همین از Space استفاده کردم و به این صورت نوشتم :




like '% '+@Param+' %'



که راه اصلا جالبی نیست .

راه اصولی این کار چیست ؟

eyes_shut_number1
سه شنبه 24 مهر 1386, 18:59 عصر
i think best answer is :
create full text search

AminSobati
چهارشنبه 25 مهر 1386, 12:26 عصر
دوست عزیزم،
چرا حتما باید از Like استفاده کنین؟ مثلا علامت تساوی چه اشکالی داره؟

eyes_shut_number1
چهارشنبه 25 مهر 1386, 14:53 عصر
استاد AMINSOBATI یه سوال؟
بهتر نیست برای این کار از fulltextsearch استفاده کنیم !؟

AminSobati
چهارشنبه 25 مهر 1386, 23:50 عصر
در جستجو با مکانیزم FTS باید همیشه ابتدای کلمه مشخص باشه و از Wildcard نمیشه استفاده کرد. ولی چیزی که من از سوال متوجه شدم با علامت تساوی حل میشه.

eyes_shut_number1
پنج شنبه 26 مهر 1386, 06:43 صبح
درسته ولی در عمل برای رشته like و = باید یجور کار کنند!
در مورده textindex درسته وایلدکارد (%[a-g] ندایرم

eworkpro
جمعه 27 مهر 1386, 23:13 عصر
سلام.
اقا من می خوام بدونم که اگه بخوام دستوری بنویسیم که رکودهایی select کنه با این شرط که تمام رکورد ها اول نام آنها با A شروع شده باشه باید چیکار کنم ؟ از like باید استفاده کنم ؟
لطفا کمکم کنید . نیاز فوری دارم !

SYNDROME
شنبه 28 مهر 1386, 04:55 صبح
سلام.
اقا من می خوام بدونم که اگه بخوام دستوری بنویسیم که رکودهایی select کنه با این شرط که تمام رکورد ها اول نام آنها با A شروع شده باشه باید چیکار کنم ؟ از like باید استفاده کنم ؟
لطفا کمکم کنید . نیاز فوری دارم !
از دستور زیر استفاده کنید.


Select *
From Tbl_Test
Where Name 'A%'

موفق باشید

eyes_shut_number1
شنبه 28 مهر 1386, 06:52 صبح
Select *
From Table_Name
Where Name= 'A%'
یا
Select *
From Table_Name
Where Name like 'A%'

eworkpro
شنبه 28 مهر 1386, 21:16 عصر
خفن ممنون از شما دوستان !

SYNDROME
شنبه 28 مهر 1386, 22:13 عصر
Select *
From Table_Name
Where Name= 'A%'

با احترام
دوست عزیز این دستور عمل Like را انجام نمی دهد.
موفق باشید

nazaninam
دوشنبه 30 مهر 1386, 20:08 عصر
ببینید دوستان شاید من منظورم را بد مطرح کردم !
با عملگر مساوی (=) فقط رکوردی که دقیقا اون مقدار را داراست برگردانده میشه ، در مثالی که عرض کردم متن رکورد hello dear programmer بود ، به نظر شما hello dear programmer با programmer مساوی است؟؟؟؟؟!!
بنده می خواهم که کاربر فقط اگر programmer (یا hello یا dear) را جستجو کرد رکورد برگرده
در ضمن من نمیخوام از full text استفاده کنم

AminSobati
دوشنبه 30 مهر 1386, 20:14 عصر
پس باید متن رو خرد کنین به لغات، هر لغت یک رکورد میشه در حالیکه که با یک فیلد مشخص میکنه به متن کدوم رکورد مربوط هست. حالا لغت مورد نظر رو باید در این جدول جدید جستجو کنین

nazaninam
سه شنبه 01 آبان 1386, 21:23 عصر
مگه میشه همچین چیزی جناب مدیر !!!؟
متن های من هر کدومش چندین صفحه هستند و رکورد های بانک اطلاعاتی بسیار زیاد !
این راه کلی پروسه میگیره و سرعت بسیار پایین میاد ، جستجو برای یک وب سایت هست

AminSobati
چهارشنبه 02 آبان 1386, 10:39 صبح
خوب شاید براتون جالب تر بشه اگر بدونین خود Full Text Search از چنین روشی استفاده میکنه! یعنی تمام لغات خرد میشن توسط Word Breaker و ایندکس براشون ساخته میشه. اما این عملیات خارج از SQL Server اتفاق میافته. اگر امکان FTS ندارین، باید آستین ها رو بالا بزنین و کمی کد بنویسین