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. ![]()
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. ![]()