PDA

View Full Version : سوال: مرتب کردن نتایج جستجو بعد از کوئری و با مقایسه 2 رشته



numberone1
یک شنبه 21 آبان 1391, 15:32 عصر
سلام

برای سرچ سایت اول از دیتابیس کوئری میگیرم بعد میخوام با استفاده از مقایسه 2 رشته باهم بعنی رشته اول که کلمه ای هست که کاربر تایپ کرده و رشته دوم خروجی هست که از دیتابیس بیرون اومده
حالا 2 تا مشکل هست
یکی اینکه توی کوئری از limit استفاده شده برای pagination و توی هر بار جستجو داره فقط 10 تا جواب در میاره

یکی هم اینکه میخوام نتایجی که از کوئری بدست اومده کامل نمایش داده بشه ولی بر اساس درصد شباهت 2 رشته مرتب بشه نه order by کوئری

حالا برای نمایش باید از آرایه استفاده کنم؟ برای کوئری بدون limit باید از چه راهی استفاده کنم؟
لطفا راهنمائی کنید ممنون

mohsen6500
یک شنبه 21 آبان 1391, 16:02 عصر
سلام دوست عزیز
معمولش اینه که یه حدی رو قرار بدی ولی خوب اگر نمیخوای حدی باشه بدون limit یعنی اگر limit نذاری نمی یاد؟
برای جستجوی مشابه هم میتونی کلمه مورد نظرت رو با استفاده از دوتا درصد% محصور کنی به این شکل :

SELECT * FROM `MyTable` WHERE `MyField` LIKE '%$myWord%'
موفق باشید

numberone1
دوشنبه 22 آبان 1391, 08:28 صبح
منظور من این نبود
ببینید فرض کنید من یک کوئری برای سرچ دارم به این شکل


SELECT * FROM `tbl` where `app` = '1' AND `city` = '$state' AND (`unit` LIKE '%$search%' OR `keyword` LIKE '%$search%' ORDER BY `tarikh` DESC LIMIT $start, $limit

اینجا من کوئری سرچ رو محدود کردم برای pagination
حالا میخوام این کار و نکنم و بجاش یک کوئری بنویسم به این شکل


SELECT * FROM `tbl` where `app` = '1' AND `city` = '$state' AND (`unit` LIKE '%$search%' OR `keyword` LIKE '%$search%' )

بعد جواب های کوئری که داخل آرایه هست مرتب کنم
فرض کنید خروجی های این کوئری داخل آرایه ای به نام $row هست
کلمه ای که کاربر سرچ کرده داخل $search هست
با تابع های مقایسه 2 رشته با هم این 2 تا رشته رو مقایسه کنم و اول اون رشته هائی که شباهت بیشتری با هم دارن و اول صفحه چاپ کنم بعدا بقیه
نمیدونم خروجی های توی آرایه که از کوئری بدست اومده رو چجوری اول مرتب کنم بعد نمایش بدم؟!

2undercover
دوشنبه 22 آبان 1391, 14:56 عصر
تنها چیزی که من پیدا کردم تابع substr_count هستش که تعداد تکرار یک رشته رو در یک رشته بر می گردونه!

numberone1
سه شنبه 23 آبان 1391, 09:44 صبح
تنها چیزی که من پیدا کردم تابع substr_count هستش که تعداد تکرار یک رشته رو در یک رشته بر می گردونه!
نه منظور من این نبود
شما فرض کنید الان نتیجه کوئری داخل آرایه $row وجود داره
حالا میام با استفاده از حلقه while هر ردیف و مقایسه رشته ای میکنم درصد شباهتشون مشخص میشه
مثلا ردیف اول 90% شباهت داشت با کلمه جستجو شده .. ردیف دوم 10% ردیف سوم 50% و ......
حالا مشکل من اینه که موقع نمایش , اینا رو چطوری بر اساس درصد بالاتر نمایش بدم ؟؟
یعنی اول اونی که 90 درصد شباهت داشته کلماتش , نمایش بدم بعد به ترتیب درصد های پائین تر و؟



while($row = mysql_fetch_array($sql )){
similar_text(strtoupper($search), strtoupper($row['unit']), $similarity_pst);
if (number_format($similarity_pst, 0) > 30){
}

الان توی کد بالا اگر شرط درست بود و درصد از 30 بالاتر بود چطوری بریزمش توی یک آرایه بعد آرایه رو با استفاده از یک تابع دیگه مرتب کنم بر اساس درصد ها ؟؟
اینم بگم که تعداد اندیس های آرایه برای هر ردیف زیاده نزدیک 40-50 تا اندیس داره ...