التصنيفات وتصنيفاتها الفرعية باستخدام OR

قد ترغب أحيانًا في العثور على معلومات حول مواضيع تقع ضمن فئات معينة، بالإضافة إلى جميع المواضيع الموجودة في الفئات الفرعية لتلك الفئات أيضًا. يمكنك إضافة category_id لكل فئة فرعية إلى استعلامك، ولكن هذا قد ينتج عنه قائمة طويلة جدًا اعتمادًا على إعدادات الفئة/الفئة الفرعية لديك. :slight_smile:

طريقة بديلة هي الإضافة في جدول categories واستخدام OR:
(تأكد من تعديل القيمة لتكون قيمة الفئة الأصلية)

SELECT 
    t.category_id,
    t.id AS topic_id
FROM topics t
  JOIN categories c ON c.id = t.category_id
WHERE (c.id = 5 OR c.parent_category_id = 5)

يمكنك أيضًا استخدام هذا مع معلمة:

-- [params]
-- int :category_id

SELECT 
    t.category_id,
    t.id AS topic_id
FROM topics t
  JOIN categories c ON c.id = t.category_id
WHERE (c.id = :category_id OR c.parent_category_id = :category_id)

وللتعديل على فئات متعددة مع فئات فرعية، يمكنك استبدال المعلمة بنسخة int_list وتكييف استعلامك لاستخدام IN كما يلي:

-- [params]
-- int_list :category_id

SELECT 
    t.category_id,
    t.id AS topic_id
FROM topics t
  JOIN categories c ON c.id = t.category_id
WHERE (c.id IN (:category_id) OR c.parent_category_id IN (:category_id))

أو ترميز الفئات الأصلية بشكل ثابت في الاستعلام نفسه:

SELECT 
    t.category_id,
    t.id AS topic_id
FROM topics t
  JOIN categories c ON c.id = t.category_id
WHERE (c.id IN (4, 5) OR c.parent_category_id IN (4, 5))

هذه الاستعلامات هي في الغالب أمثلة لتوضيح المبادئ. نأمل أن تجدها مفيدة، ولكن إذا كانت لديك أي أسئلة، فيرجى طرحها أدناه. :slight_smile:

7 إعجابات