• 2 رای - 4.5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
طریقه مرتب کردن نتیجه ی جستوجو
#1
Question 
سلام دوستان. کسی میدونه چطوری نتیجه ی جستوجو توی دیتا بیس رو به ترتیب اینکه هر نتیجه ای که شیه تر به عبارت جستو جو شده هست رو اول بیاره و اونایی که به کلمه ی ما شباهت کمتری دارن عقب تر بیاره.
  پاسخ
تشکر شده توسط :
#2
از like استفاده کردی؟
  پاسخ
تشکر شده توسط : shahin_mahvareh
#3
آره از like استفاده کردم.ولی اینجوری نتیجه رو به ترتیب ثبت شدن اطلاعات میاره.یعنی هر چی که جدید تر ثبت شده رو اول میاره.من میخوام که هر چی که نزدیکتر به کلمه ی ما هست رو اول بیاره و هر چی که شباهت کمتری به واژه ی سرچ شده رو داره عقب تر بیاره.
  پاسخ
تشکر شده توسط :
#4
سوال جالبی بود ، اصلا به این مورد توجه نکرده بودم. Huh
  پاسخ
تشکر شده توسط : shahin_mahvareh
#5
بسم الله الرحمن الرحیم
سلام
-بنظرم یه راهش می تونه این باشه که یا تابع نوشته بشه بعد همه رکوردها رو ازش رد کنیم و هر کدوم که مطلب جست و جو شده توش زیاد بود تو نتایج در قسمت اول نشون بدیم
یعنی هر رکوردی که توش مطالبی که جست و جو شده امتیاز بیشتری نسبت به بقیه که همون مطلب درش کمتر هست داده بشه و سپس نسبت به امتیازات که هر کدوم بیشتر باشه تو لیست اول باشه

-علاوه بر این می شه یه دیتابیسی ساخت و کلمات مشابه رو توش جمع کرد و وقتی یه چیزی جست و جو می شه از اون کلمات استفاده کرد و هر دوم که تو رکورد ما بیشتر بود تو لیست اول باشه
  پاسخ
تشکر شده توسط : shahin_mahvareh
#6
با order by هم میشه . منتها نیاز به یک function داره که بیاد یک بررسی انجام بده و یک عدد ایجاد کنه. من یا اسکیوال سرور الان یک تست ساده زدم جواب گرفتم . اما مای اسکیو ال رو حس تستش رو ندارم.
به این صورت

کد پی‌اچ‌پی:
select tablename.*,raterecordserachvalue ) as rate where like '%serachvalue%' order by rate 

حالا تو این فانکشن اومدم مقدار رکورد رو بر اساس این موارد جک کردم. تکرار در متن، شبیه بودن به هم مثل (strcomp) و خروجی ها رو جمع زدم و یک عدد برگردوندم.
این جواب داد اما باید روش کار بشه. واسه تست نتیجه خوبی داشت
  پاسخ
تشکر شده توسط : shahin_mahvareh
#7
full text استفاده کن
  پاسخ
تشکر شده توسط : shahin_mahvareh
#8
ممنون از راهنمایی شما.این full text چیه؟چطور باید از full text استفاده کرد.search کردم چیزی پیدا نکردم.یه راهنمایی بفرمائید.ممنون.
(۱۳۸۹ شهریور ۲۳, ۰۱:۲۳ ق.ظ)zoghal نوشته: با order by هم میشه . منتها نیاز به یک function داره که بیاد یک بررسی انجام بده و یک عدد ایجاد کنه. من یا اسکیوال سرور الان یک تست ساده زدم جواب گرفتم . اما مای اسکیو ال رو حس تستش رو ندارم.
به این صورت

کد پی‌اچ‌پی:
select tablename.*,raterecordserachvalue ) as rate where like '%serachvalue%' order by rate 

حالا تو این فانکشن اومدم مقدار رکورد رو بر اساس این موارد جک کردم. تکرار در متن، شبیه بودن به هم مثل (strcomp) و خروجی ها رو جمع زدم و یک عدد برگردوندم.
این جواب داد اما باید روش کار بشه. واسه تست نتیجه خوبی داشت
چطور از این دستور توی mysql استفاده کنیم میشه یکم بیشتر توضیح بدین؟
  پاسخ
تشکر شده توسط :
#9
http://devzone.zend.com/article/1304
  پاسخ
تشکر شده توسط : shahin_mahvareh
#10
دوستان یه راهی به ذهنم رسید یه نگاهی بهش بندازین ببینین بدرد بخور هست؟اگه بدرد بخور بود توی کد نویسی یه کمکی هم به من بکنید.
اول بیاد یه سری با like اینو پیدا کنه:
کد پی‌اچ‌پی:
Like '$value' 
یعنی دقیقا عین کلمه رو پیدا کنه.و همه ی رکورد های پیدا شده رو بر گردونه.دوره ی بعدی بیاد دوباره با like اینو پیدا کنه:
کد پی‌اچ‌پی:
Like '$value%' 
این دفه میاد کلمه هایی که اولش با عبارت سرچ شده همخونی داره رو پیدا میکنه.و چک میکنه ببینه در دوره ی قبلی آیا این رکورد های که الان پیداکرده پیدا شده بودن یا نه و اون رکورد هایی که در دوره ی قبل پیدا شده بون رو حذف کنه و اون رکورد هایی که نبودن رو برای نتیجه در ادامه ی قبلی بر گردونه. و دوباره دفعه ی بعد دوباره میاد با Like اینو پیدا میکنه:
کد پی‌اچ‌پی:
Like '%$value' 
این دفه میاد کلمه هایی که آخرش به عبارت سرچ شده هماهنگی داره رو پیدا میکنه.و دوباره چک میکنه ببینه در دورهای قبلی آیا این رکورد های که الان پیداکرده پیدا شده بودن یا نه و اون رکورد هایی که در دورهای قبل پیدا شده بون رو حذف کنه و اون رکورد هایی که نبودن رو برای نتیجه در ادامه ی اونا بر گردونه.و دفعه ی بعد دوباره میاد اینو سرچ میکنه:
کد پی‌اچ‌پی:
Like '%$value%' 
این دفعه میاد کلمه هایی که وسط اون با عبارت سرچ شده همخونی داره رو پیدا میکنه.و باز چک میکنه ببینه در دورهای قبلی آیا این رکورد های که الان پیداکرده پیدا شده بودن یا نه و اون رکورد هایی که در دورهای قبل پیدا شده بون رو حذف کنه و اون رکورد هایی که نبودن رو برای نتیجه در ادامه ی اونا بر گردونه.
میتونیم برای همه رکوردها یه شماره تعریف کنیم که در هر بار سرچ فقط فیلد شماره های رکور های ما رو به ما بر گردونه و توی سرچ بعدی ببینه که آیا شماره هایی که در این دوره پیدا کرده در دوره های قبلی سرچ هم موجو است یا نه اونای که موجود بودن دو باره تکرار نشن و اونایی که نبودن اضافه بشن.چون فقط می خوایم یه یه بار به ما یک رکورد رو نمایش بده و ممکنه توی به رکورد چند بار عبارت سرچ شده مجود باشه.(فکر کنم برای رختن نتایج توی متغیر باید از آرایه ها استفاده کرد.)
در پایان یه سری شماره از سرچ های بالا باقی میمونه که هیچ کدومم تکراری نیست و ما رکورد های مربوط به این شماره ها رو با Where نمایش میدهیم.
و برای نمایش هم میایم اون قسمت از کلمه رو که سرچ کردن و توی رکورد های ما پیدا شده رو با دستور زیر Bold میکنیم.
کد پی‌اچ‌پی:
str_replace($search,"<b>".$search."</b>",$x[1]); 
اگه کسی راهی سراغ داشت که عملیات سرچ یه بار انجام بشه و همین کار ها رو انجام بده بگه ممنون میشم.
تو رو خدا اگه خیلی بد بود بهم نخندید.Undecided
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
من فکر کنم این کد با چیزایی که بالا نوشتم برابر باشه یه نگاه بکنین نظرتون رو بگین اگه اشتباه هست بگبن کجاش اشتباه هست و چرا همون نتیجه بالا رو نمیده و درستش چه جوریه.
کد پی‌اچ‌پی:
SELECT FROM `tableWHERE 
(`fild1like '$a'   or `fild2like '$a'   or `fild3like '$a'  )or
(`
fild1like '%$a'  or `fild2like '%$a'  or `fild3like '%$a' )or
(`
fild1like '$a%'  or `fild2like '$a%'  or `fild3like '$a%' )or
(`
fild1like '%$a%' or `fild2like '%$a%' or `fild3like '%$a%'
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان