12 يناير، 2009

تلميحات SQL 1 البحث السريع بدون استخدام like

السلام عليكم و رحمة الله و بركاته ، صارت فترة طويلة لم يكتب شيء في هذا الجزء من المدونة و هذا غالبا بسبب كسلي :)

فكرت اضع بعض تلميحات ال اس كيو ال SQL كون لا بد لأي مبرمج في هذه الفترة ان يستخدمها لكي يتصل بقاعدة بياناته

هنالك الكثير من الحركات الجميلة في هذه اللغة التي نغفل عنها لقلة وقت الإطلاع و هذه أحد تلك الحركات

البحث السريع دون استخدام like

في حالة اذا كان لدينا في احد جداول قاعدة البيانات عمود يحتوي على نص طويل مثلا نص قصة أو مثلا تدوينة أو رسالة او موضوع منتدى طبعا هذا النص سيتكون من العديد من الكلمات - الآلاف منها -- .

في حين الحاجة للبحث سنبحث عن كلمة معينة في جميع نصوص مواضيع المنتديات مثلا . فأسهل طريقة لعمل ذلك هي
"Select title from articles where body like '%database%'"

ولكن ماذا لو كان لدينا الكثير من المواضيع (بالتالي رفوف كثيرة بالملاين في جدول الـ articles ) حينها سيصبح البحث بطيئا جدا
فاذا كان الهدف من البحث لديك هو الوصول للنتيجة بأسرع طريقة فهذه إحدى الطرق التي اجدها جيدة في الـ MYSQL
أولا عليك جعل جدول الـ articles من نوع الـ
MyIsam
ثانيا : علينا اضافة خاصية ارضفة للعمود body و ذلك بالأمر التالي
ALTER TABLE articles ADD FULLTEXT(body);
الآن حين البحث اذا استعملنا الاستعلام التالي الذي يبحث عن كلمة database في عمود الـ body من جدول الـ

"select title , MATCH (body) AGAINST ('database') as rank from articles ORDER BY rank desc;"

سنحصل على نتيجة مثل :

|title | rank |
-----------------
|sqltip | 1.3 |
| eclipse| 0 |
|.NET | 0 |

هنا الرانك عبارة عن مدى تطابق النتيجة اثناء البحث وكلما كان اكبر كلما دل على تطابق اكثر طبعا الصفر تعني عدم الحصول على الكلمة في النص و يمككنا عدم اظهار النتائج التي تحتوي على صفر بالاستعلام التالي

"select title , MATCH (body) AGAINST ('database') as rank from articles where MATCH (body) AGAINST ('database') > 0 ORDER BY rank desc;"

اتمنى ان تكون هذه التلميحة مفيدة لكم

لرؤية التدوينة في نسختها الانجليزية تفضل هنا

0 التعليقات:

إرسال تعليق