السلام عليكم ورحمة الله وبركاته
في هذا الدرس ان شاء الله سنتحدث عن خاصية البحث في الموقع
تعتبر خاصية البحث في الموقع من اهم الاشياء التي يجب ان يحتوي عليها اي موقع وذلك من اجل الوصول الى المعلومات في الموقع بسرعة وسهولة تامة
على العموم هناك العديد من الطرق التي تستطيع بها ان تصمم خاصية البحث في موقعك
في هذا الدرس سوف اقد بعض الملاحظات والنصائح حول هذه الخاصية من اجل الوصول الى نتائج جيدة في البحث بعد البرمجة طبعا
الطريقة الاولى لبرمجة خاصية البحث وهي ان نعتمد على انفسنا في برمجة خاصية البحث الخاصة بموقعنا
وهنا علينا ان نتعامل مع قاعدة البيانات بالطبع , بحيث نوفر للمستخدم حقول ليدخل فيها المعلومات المطلوبة في البحث
ونستخدم فيما بعد تلك المعلومات التي ادخلها ونبحث عنها في قاعدة البيانات ثم نقوم بإرجاع النتيجة له
طبعا انا هنا لن اشرح اي كود سورس لان الامر واضح وايضا طريقة برمجة خاصية البحث ستختلف من شخص الى خر
على حسب احتياجاتك وايضا على حسب التخطيط الذي رسمته للجداول المتواجدة في قاعدة البيانات (للجداول المتواجدة في قاعدة البيانات؟؟)
اجل يعتبر التخطيط الجيد لثاعدة البيانات من بين النقاط الاساسية التي ستساعدك في برمجة خاصية البحث , وكلما زادت النسبة المئوية للتخطيط الجيد
كلما زادت النسبة المئوية لنجاح عملية البحث وايضا لسهولة برمجتها , سوف اعطي مثال بسيط لتوضيح هذا الامر وتقريبكم الى الفهم اكثر
مثلا نحن هنا نعمل على سكريبت رياضي , وبالتالي في قواعد البيانات او لنقل جدوال قواعد البيانات لدينا
ستحتوي على معلومات مثلا حول الاخبار الرياضية
لو نفرض انه لديك جدول واحد فقط تضع فيه جميع الاخبار الرياضية من اصابات وانتقالات ,,,,الخ
هنا سيكون من الصعب الوصول الى المعلومة بشكل دقيق جدا , لانك تملك جدول واحد فيه العديد من الاخبار والمعلومات
وبالتالي فالاعتماد على عنوان الخبر وحده لن يكون كافي , وهنا ستضطر الى طلب العديد من المعلومات من المستخدم
كعنوان الخبر , اللاعب المصاب مثلا , تاريخ طرح الخبر ,,,,الخ , وذلك حتى تتمكن من جلب المعلومة الصحيحة اثناء البحث
وهذا يعتبر امر مزعج بالنسبة للمستخدم , فهو يحب دوما ان يقدم القليل من المعلومات ويجد نتائج مرضية طبعا
لكن لو كان لديك مثلا العديد من الجداول مثلا فالنفرض انك ستقوم بتقسيم جدول الاخبار الى عدة جداول اخرى
مثلا اخبار انتقالات اللاعبين في جدول وحدها , اخبار اصابات اللاعبين , اخبار الاندية الرياضية , مواعيد مباريات كرة القدم ,,,,, الخ
هنا ستكون نسبة نجاح عملية البحث واحضار المعلومة الصحيحة اكبر بكثيرة من السابقة من حيث النجاح والسرعة في التنفيد
فيكفي في المثال الثاني ان تطلب معلومات اقل من المستخدم , فمثلا لو كان يريد البحث عن اللاعب المصاب , يكفي ان يكتب معلومات حوله
وانت ستبحث عنها في جدول اصابات اللاعبين وحين تجدها تربطها مع باقي الجداول لجلب باقي المعلومات وتقديمها الى المستخدم
اي ان الامر هنا سيرجع لك والى طريقة تقسيمك لقاعدة البيانات الخاصة بك وايضا الى المعلومات التي ستطلبها من المستخدم
(المعلومات التي ستطلبها من المستخدم؟؟؟؟؟ لماذا؟؟؟؟؟)
اهم شيء في خاصية البحث او يمكن القوم ان ثاني اهم شيء في خاصية البحث هو المعلومة التي ستطلبها من المستخدم
يجب ان تكون تلك المعلومة صغيرة ومفيدة
اي ان تجلب معلومات قليلة من المستخدم , ولكن في نفس الوقت يجب ان تكون هذه المعلومات قيمة جدا
(فيكفي ان تضع تنبيه او رسالة توضيحية للمستخدم او مثال لتنبهه الى كيفية استخدام خاصية البحث الخاصة بك)
فكلما كانت المعلومة التي يقدمها دقيقة كلما كانت نسبة الوصول الى النتيجة المطلوبة كبيرة , فعلى سبيل المثال نذكر محرك البحث الخاص ب google
كلما ادخلت عدد كبير من الكلمات كلما كانت نتيجة البحث سيئة , لكن في المقابل كلما ادخلت معلومات قليلة ولكن دقيقة وتشرح طلبك كلما وصلت الى نتائج جيدة بنسبة كبيرة
هناك ايضا الجانب البرمجي وهو النقطة الثالثة التي تأتي بعد المعلومة
سأوضح هذا الامر عن طريق مثال , لو كان المستخدم يبحث عن قيمة عددية وا قيمة تاريخية فالامر بسيط
كل ماعليك ان تفعله هنا هو ان تعمل طلب SQL اين تكون القيمة التي ادخلها مساوية للقيمة المخزنة في قاعدة البيانات
او يمكن عمل مجال , اي القيمة محصورة في مجال معين ,,, الخ
لكن لو ادخل المستخدم قيمة نصية؟؟ هنا يأتي المشكل او التحدي الاول الذي ستواجدها
سأوضح لك الامر
لو نفرض مثلا انا في جدول الاصابات يوجد هذا الخبر او العنوان
(اصابة اللاعب A) تحت خانة sick_player
والمستخدم هنا يريد ان يبحث عن هذه المعلومة بالضبة , اي المعلومة المتعلقة بإصابة اللاعب A
لو ادخل في حقل البحث الكلام التالي (اصابة اللاعب A) , هنا نتيجة البحث ستكون عادية جدا
لاننا سنقارن المدخل الذي اعطاه لنا بما بوجد في قاعدة البيانات عن طريقة عملية =
WHERE sick_player = اصابة اللاعب A
اي ان اصابة اللاعب A=اصابة اللاعب A وبالتالي نتيجة البحث صحيحة
لكن لو قام هو بإدخال الكلام التالي (اللاعب المصاب A)
يصبح الامر كالتالي
WHERE sick_player = اللاعب المصاب A
لن يجد هنا اي نتيجة
لان اصابة اللاعب A!= اللاعب المصاب A
وبالتالي هنا انت يجب ان تتعامل مع هذا الامر برمجيا , لان الشيء الذي ادخله المستخدم والذي يبحث عنه متواجد بالفعل في قاعدة البيانات
لكن طريقة البرمجة التي تستخدمها ستوفر له اما الاجابة الخاطئة او لاتوفر له اي اجابة اصلا
وبالتالي يجب التعامل مع هذا الامر كما قلت برمجيا , اي عدم استخدام المساوات في البحث الا للقيم العددية او التاريخية فقط
على العموم كانت هذه هي النقاط المهمة التي اردت ا انبه لها بهذا الخصوص
فتصميم جيد لقاعدة البيانات سيساعد بشكل كبير في تسهيل برمجة خاصية البحث
واثناء تعاملك مع الكود اي اثناء برمجتك لخاصية البحث ستفهم كلامي هذا جيدا . :)
هذا في حالة ما اذا اردت برمجة خاصية البحث في موقعك , اما ان لم ترد اتعاب نفسك فيمكنك اما استخدام framwork لتسهيل الامور عليك
او يمكنك ايضا الاعتماد على محرك البحث google من اجل جعله يقوم بالبحث في موقعك
لكن للاشارة , نسبة نجاح عملية البحث الخاصةالخاصة ب (google) ستكون اقل بكثير
من نسبة النجاح لو كنت انت من قام ببرمجة محرك البحث الخاص بك :)
قضية محرك البحث ليست شيء ثابت او (standard) الذي يمكن برمجته او وضع كود برمجي له وشرحه
وانما يجب ذكر فقط بعض النقاط المهمة والمشاكل التي قد تواجهها اثناء برمجته
لان محرك البحث يختلف على حسب اختلاف طريقة البرمجة وايضا اخلاف نوع الموقع وطريقة تصميم قاعدة البيانات
,
على العموم هذا سيكون اخر درس في الاكاديمية بإذن الله , وبالتالي هنا يمكن الاعلان عن انتهاء الاكاديمية ان شاء الله
الى جزء اخر ان شاء الله , اين سنقوم بتطوير السكريبت بشكل اكبر