قد ترغب أحيانًا في العثور على معلومات حول مواضيع تقع ضمن فئات معينة، بالإضافة إلى جميع المواضيع الموجودة في الفئات الفرعية لتلك الفئات أيضًا. يمكنك إضافة category_id لكل فئة فرعية إلى استعلامك، ولكن هذا قد ينتج عنه قائمة طويلة جدًا اعتمادًا على إعدادات الفئة/الفئة الفرعية لديك. ![]()
طريقة بديلة هي الإضافة في جدول 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))
هذه الاستعلامات هي في الغالب أمثلة لتوضيح المبادئ. نأمل أن تجدها مفيدة، ولكن إذا كانت لديك أي أسئلة، فيرجى طرحها أدناه. ![]()