موردی عجیب در نمایش نتیجه ی جستجو در دیتابیس (پروژه ی dictionary) - (حل شد)
درود بر همگی دوستان
موردی که برای من اتفاقی پیش اومد و خواستم در جریان بذارم. در بخش پروژه دیکشنری خواستم از کدها برای بخشی از سایتی که در حال طراحی اون هستم استفاده کنم و اونو توسعه بدم و یه بخش جستجو راه اندازی کنم. اما با مشکلی عجیب برخورد کردم. دستور SQLی که در پروژه ی دیکشنری استفاده شده در فایل feed که به صورت Ajax از دیتابیس خونده میشه، کلماتی که با حروف انگلیسی E , H , L و O شروع میشن رو در نتایج جستجو نمایش نمیده و حتی کلماتی که وسط اونها این حروف وجود داره هم نمایش نمیده!! میتونید امتحان کنید.
قبلا که آموزش ها رو میدیدم به این مشکل برنخوردم چون یا در دیتابیس کلماتی که شروعش با این حروف باشه نبود و یا این موارد اصلا تست نشد!
اما اگه بعد از این حروف حرف دیگه ای رو برای جستجو وارد کنیم اون موقع نتایج مرتبط نمایش داده میشه.
مثال: در دیتابیس کلمه ی OUTPUT وجود داره. اما با وارد کردن حرف O هیچ نتیجه ای نمایش داده نمیشه ولی بعد که حرف U رو هم وارد کردیم (یعنی در باکس جستجو OU وارد شده باشه) در نتیجه، کلمه ی OUTPUT نمایش داده میشه. یعنی برای نمایش OUTPUT باید OU رو تایپ کنیم و با تایپ تنها حرف O نتیجه ای در بر نداره!!
این مورد تنها برای حروفی که ذکر کردم وجود داره.
دوستان من هیچ فیلتری رو از سمت دیتابیس MySQL یا کد دستور SQL انجام ندادم و حتی دقیقا پروژه دیکشنری استاد رو دوباره لود و امتحان کردم. مطمئنم این یک مشکل فنی در ساختار کدها یا دیتابیس هست یا اینکه واقعا من موردی رو جا انداختم که خوشحال میشم دوستان و اساتید در این مورد راهنمایی کنن.
برای سرچ استاد در کوری های خود از LIKE استفاده کرده بود .
من خودم وقت نکردم تست کنم ولی این ساختار کد SQL رو هم امتحان کنید .
SELECT * FROM 'mytable' WHERE INSTR('mycol', 'abc') > 0
بالاخره به هر بدبختی ای بود علتش رو پیدا کردم. هیچ جا مطلبی راجع بهش گفته نشده بود یا من نتونستم پیدا کنم
علت خیلی عجیبه. اول این اسکرین شات رو ببینید:
شما هر عبارتی رو در رکورد اول دیتابیس بنویسید از حوزه ی جستجو خارج میشه! شاید بگید دارم اشتباه میکنم اما امتحان کنید. حتما تا به حال براتون اتفاق نیوفتاده. دلیل این که برای من حروف H , E , L , O در نتیجه جستجو نمیومد همین بود که اولین رکورد دیتابیسم کلمه ی hello بود و این حروف رو از حوزه ی جستجو خارج می کرد.
من برای اطمینان کلمه ی رکورد اولی رو عوض کردم. مثلا گذاشتم roya و با این کار حروف R , O , Y , A در نتیجه ی جستجو دیده نمی شدند!
جالب اینجاست که برای hello اگه عبارات زیر رو جستجو کنید هیچی پیدا نمیکنه:
h , he , hel , hell , e , el , ell , ello , l , ll , llo , lo و خود hello !!
با این تفاسیر دیگه نباید رکورد اول دیتابیس رو یکی از اطلاعاتمون قرار بدیم و باید اونو خالی نگه داربم یا یک کاراکتر بی استفاده در نظر بگیریم.
آیا این یک ارور منطقی هست؟ دلیلش چیه؟
ممنون میشم دوستانی که اطلاع دارند در موردش ما رو راهنمایی کنن اگه ممکنه و با تشکر از دوستانی که این مورد رو چک کردن و نظرشون رو گفتند.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .



