PDA

View Full Version : سوال: جستجو در چند فیلد



mohammadsaleh
چهارشنبه 29 خرداد 1398, 14:10 عصر
سلام دوستان
برای جستجوی یک عبارت در چند فیلد می توان از عبارتی شبیه عبارت زیر استفاده کرد:


Where f1 & ' ' & f2 & ' ' & f3 like '%" & strSearch & "%'
برای مثال فیلدهای سه گانه به ترتیب شامل کلمات محمدحسین - احمدزاده - سیستان و بلوچستان می باشد.
با جستجوی
"احمد"
"محمد%احمد%بلوچ"
"حس%زاد%لوچ"
رکورد مورد نظر یافت می شود. اما در صورتی که ترتیب نوشتن فیلدها جابجا شود
مثل
"احمد%محمد%بلوچ"
"بلوچ%حسین"
رکوردی یافت نمی شود
البته این نتیجه منطقی است و به آن ایرادی وارد نیست. اما در برنامه نویسی همه چیز ممکن است، چراکه در گوگل سرچ این اتفاق ممکن شده.
آیا راه حلی به نظر اساتید می رسد

mazoolagh
پنج شنبه 30 خرداد 1398, 10:24 صبح
پرسش با نمونه ای که گذاشتین همخوانی نداره،
در واقع شما دارین چند عبارت رو در یک عبارت جستجو میکنین (اینکه اون عبارت خودش از پیوستن چند فیلد ساخته میشه مهم نیست)
باید برای هر عبارت جداگانه مقایسه و اونها رو با هم AND یا OR کنین؛

یا:

برای هر عبارت یک select بنویسین و نتایج رو union کنین (اگر شرط ها باید با هم AND بشن جواب نمیده)

mohammadsaleh
چهارشنبه 05 تیر 1398, 17:21 عصر
عبارت فوق در مورد هر کدام از جستجوهای زیر مشکلی ندارد

"احمد"
"محمد%احمد%بلوچ"
"حس%زاد%لوچ"
و اگر فیلدهایی شامل بخشی از کلمات فوق باشند نتایج را از رکوردست استخراج می کند
البته من شاید منظورم را بد رساندم
در یک بانک اطلاعاتی من دنبال افرادی به نام محمد و فامیلی احمدزاده می گردم
با نوشتن عبارت محمد%احمد این افراد استخراج و نمایش داده می شوند
حال اگر من عبارت احمد%محمد را بنویسم منطقا اگر افرادی به نام محمد و فامیلی احمد باشند جستجو نخواهند شد و کسانی که نامشان احمد و فامیلی محمد دارند یافت خواهند شد
منظورم من این بود که کد عبارت جستجو به نحوی باشد که نتایج موسع تری بتوان از آن استخراج کرد. البته شاید بفرمایید این چه کاری است. چون در جستجو همیشه دنبال خلاصه کردن اطلاعات هستیم. اما به هر حال گفتم شاید به عنوان یک ایده یک قدم در کد نویسی به توانمندی خود بیفزاییم

mazoolagh
پنج شنبه 06 تیر 1398, 08:48 صبح
این که گفتم پرسش با نمونه همخوانی نداره بخاطر این بود که هم خواسته شما رو میدونم چی هست و هم میدونم روش کارتون اشتباه هست.
فکر کنم با کار * (و نه %) آشنایی ندارین!
وقتی "*محمد*احمد*" رو جستجو میکنین یعنی اول محمد بعد احمد، ترتیب کاملا اهمیت داره ولی اینکه قبل و بین و بعدش چی هست اهمیت نداره.
اینکه چند فیلد رو concat کنین چاره کار نیست مگر اینکه ترتیب concat کردن با ترتیب عبارات یکی باشه.

برای هر عبارت باید در فیلد خودش جستجو کنین:
WHERE FirstName Like '*احمد*' AND LastName Like '*محمدزاده*' AND State Like '*ستان*'

mohammadsaleh
پنج شنبه 06 تیر 1398, 09:51 صبح
در دستورات sql بین علامت % با * تفاوتی ندیدم . شاید هم تفاوتی هست که من دقت نکردم.
در هر صورت تشکر.

ariayekta
جمعه 07 تیر 1398, 18:07 عصر
در دستورات sql بین علامت % با * تفاوتی ندیدم . شاید هم تفاوتی هست که من دقت نکردم.
در هر صورت تشکر.

سلام
تو اکسس 2019 * ایراد میگیره و باید از % استفاده بشه

mohammadsaleh
دوشنبه 10 تیر 1398, 14:14 عصر
در تایپیک ایجاد شده مطلبتون رو دنبال کنید نه اینجا

mohammadsaleh
شنبه 30 شهریور 1398, 14:53 عصر
سلام.
راه ساده ای پیدا کردم که این مشکل رو حل می کنه . کافی است سه فیلد را در کوئری تبدیل به یک فیلد کنیم و برای جستجوی هر تعداد کلمه مورد جستجو را با اپراتور LIKE و بین هرکدام AND بنویسیم

مثل نمونه زیر که فرض میکنیم COLUMNAME حاوی مطالب سه فیلد است. به این ترتیب ترییب جستجو دیگر اهمیت نداری.
Select * from table where
columnname like'%David%' and
columnname like '%Moses%' and columnname like'%Robi%'

mazoolagh
دوشنبه 01 مهر 1398, 11:02 صبح
در واقع شما دارین چند عبارت رو در یک عبارت جستجو میکنین (اینکه اون عبارت خودش از پیوستن چند فیلد ساخته میشه مهم نیست)
باید برای هر عبارت جداگانه مقایسه و اونها رو با هم AND یا OR کنین؛


همین پست رو با دقت خونده بودین لازم نبود سه ماه وقت بگذارین و به همین پاسخ برسین!