أطار عمل كود إجنيتور وحل مشكلة WHERE و OR LIKE في قاعدة البيانات

أمس كنت اعمل على مشروع ومن ضمن هذا المشروع جزء خاص بعملية البحث في قاعدة البيانات وعند الشروع في كتابة الكود واجهتني مشكلة أراها انها نقص في أطار العمل كود إجنيتور، المشكلة كالتالي:

عند كتابة الأوامر التالية
$this->db->where('article_status', 'published');
$this->db->like('article_title', $search_query);
$this->db->like('article_content', $search_query);
$this->db->get('articles');

فستكون نتيجة أستعلام الـ MySQL هي
SELECT * FROM (`articles`) WHERE `article_status` = 'published' AND `article_title` LIKE '%كلمة البحث%' AND `article_content` LIKE '%كلمة البحث%'

المشكلة هنا اذا كانت كلمة البحث موجودة في عنوان المقال وغير موجودة في المحتوى فسوف نفقد احد نتائج البحث واذا استبدلنا أمر الـ LIKE الثاني بـ OR LIKE للحصول على هذه النتيجة فسوف يتم تجاهز أمر الـ WHERE الأول وسوف تظهر لنا من ضمن البحث المقالات الغير منشورة.

عندها قلت لنفسي يجب ان يكون هناك امر لكي يجعل أمر الـ WHERE أو الـ LIKE في مجموعة مع بعضهم لكي تكون النتيجة كالتالي

SELECT * FROM (`articles`) WHERE `article_status` = 'published' AND (`article_title` LIKE '%كلمة البحث%' OR `article_content` LIKE '%كلمة البحث%')

ولكن للأسف كود إجنيتور خذلني هذه المرة، ولكن الحمد لله وجدت حل لهذه المشكلة بخدعة بسيطة وهي كالتالي
$this->db->where('article_status', 'published');
$this->db->where(sprintf( '(`article_title` LIKE %1$s OR `article_content` LIKE %1$s)', $this->db->escape('%' . $search_query . '%') ));
$this->db->get('articles');

أضف تعليق

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

*

يمكنك استخدام أكواد HTML والخصائص التالية: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>