PDA

View Full Version : سوال: غلط یابی در هنگام جست و جوی رکورد های پایگاه داده در php



Padrone
چهارشنبه 20 آبان 1388, 12:30 عصر
با سلام
بنده یه مشکلی که دارم اینه که من یه تکس باکسی روی فرمم به عنوان جست و جو موجوده
به طور مثال یک فیلد mysql به شکل saeed-reza-abas-milad هستش
می خوام وقتی من حرف s رو زدم زیر تکس باکس رکوردهایی که حرف اولش s هست رو نشون بده
من از چه روشی باید استفاده کنم؟
مشکل دوم اینه که به طور مثال در جست و جو کاربر کلمه milad رو به اشتباه nilad نوشته ، یا یک حرف رو جا انداخته و کلید جست و جو رو زده
چطور می تونم به کاربر بگم ایا منظورت milad هست یا نه؟

امیـرحسین
چهارشنبه 20 آبان 1388, 22:34 عصر
برای بخش اول به این تاپیک برید: ساخت سرچ با combo box (http://barnamenevis.org/forum/showthread.php?t=188830)

برای بخش دوم، شاید بشه با پردازش کلمه به کلمه چنین کاری رو کرد که اصلا به نظر بهینه نمیاد!

Padrone
چهارشنبه 20 آبان 1388, 22:57 عصر
برای بخش اول به این تاپیک برید: ساخت سرچ با combo box (http://barnamenevis.org/forum/showthread.php?t=188830)

برای بخش دوم، شاید بشه با پردازش کلمه به کلمه چنین کاری رو کرد که اصلا به نظر بهینه نمیاد!
ممنون دوست عزیز بابات پاسخگویی به قسمت اول
برای قسمت دوم می شه یک منبع یا سایت خارجی معرفی کنید که پردازش کلمه به کلمه رو بحث کرده باشه؟
مثالی که می تونم بزنم سایت IMDb.com هستش که از این روش استفاده میکنه .

zoghal
پنج شنبه 21 آبان 1388, 09:09 صبح
مورد اول ساجکشن بهش میگن. که مثال فراوان هست.

مورد دوم شما باید یک بانک از کلمات داشته باشی. بعد بیای کلمه وارد شده رو با دستوراتی مثل strcmp مقایسه کنید. شبیه ترین رو پیشنهاد بدی

امیـرحسین
جمعه 22 آبان 1388, 00:49 صبح
این یه کانسپت ساده با استفاده از regex هست که اونهایی که یک حرف اختلاف دارند رو پیدا می کنه و البته الگوی regexاش کامل نیست و فقط برای کلمات انگلیسی کار می کنه تا شما یا بقیه این کانسپت رو کامل کنند.
$text = "milad pilad cilad mitad milod milan milen";
$strTmp = $str = "milad";
$len = strlen($str);
$regex = array();

for($i=0; $i<$len; $i++) {
$left = substr($strTmp, 0, ($len-$i)*-1);
$right = substr($strTmp, $i+1);
$regex[] = "$left\w*$right";
$strTmp = $str;
}

preg_match_all('/'.join('|', $regex).'/', $text, $arr);
echo "<pre>" , print_r($arr, true);
و این هم خروجی این کد:
Array
(
[0] => Array
(
[0] => milad
[1] => pilad
[2] => cilad
[3] => mitad
[4] => milod
[5] => milan
)

)