Categorías y sus Subcategorías usando OR

A veces quieres encontrar información sobre temas que están en ciertas categorías, además de todos los temas en las subcategorías de esas categorías. Puedes agregar el category_id de cada subcategoría a tu consulta, pero esto puede producir una lista bastante larga dependiendo de tu configuración de categorías/subcategorías. :slight_smile:

Un método alternativo es agregar la tabla categories y usar OR:
(Asegúrate de modificar el valor para que sea el de tu categoría principal)

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)

También puedes usar esto con un parámetro:

-- [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)

Y para modificarlo para múltiples categorías con subcategorías, puedes cambiar el parámetro por una versión int_list y adaptar tu consulta para usar IN de la siguiente manera:

-- [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))

O codificar las categorías principales directamente en la consulta:

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))

Estas consultas son principalmente ejemplos para demostrar los principios. Esperamos que te resulten útiles, pero si tienes alguna pregunta, por favor, hazla a continuación. :slight_smile:

7 Me gusta