Contando todos los posts pertenecientes a una categoría Y sus subcategorías.
-
05-07-2019 - |
Pregunta
Realmente agradecería alguna ayuda con mi problema:
Tengo 2 tablas, categorías y publicaciones de MySQL, distribuidas (simplificadas) así:
categorías :
CATID - nombre - parent_id
publicaciones :
PID - nombre - categoría
Lo que me gustaría hacer es obtener la cantidad total de publicaciones para cada categoría, incluidas las publicaciones en subcategorías.
Ahora mismo estoy obteniendo el número total de publicaciones en cada categoría (nivel superior) (pero no en subcategorías) haciendo:
"SELECT c.*, COUNT(p.PID) as postCount
FROM categories AS c LEFT JOIN posts AS p
ON (c.CATID = p.category)
WHERE c.parent='0' GROUP BY c.CATID ORDER BY c.name ASC";
Una vez más, la pregunta es: ¿cómo puedo obtener los totales de suma para cada categoría, incluidos los totales para cada subcategoría relacionada?
La reestructuración de la base de datos a un formato de conjunto anidado no es posible, ya que estoy manteniendo un sistema existente.
¡Gracias por tu ayuda!
Solución
Si las categorías no están anidadas infinitamente, puedes UNIRAS un nivel a la vez. Aquí hay un ejemplo de hasta 3 niveles de anidamiento:
SELECT c.name, COUNT(DISTINCT p.PID) as postCount
FROM categories AS c
LEFT JOIN categories AS c2
ON c2.parent = c.catid
LEFT JOIN categories AS c3
ON c3.parent = c2.catid
LEFT JOIN posts AS p
ON c.CATID = p.category
OR c2.CATID = p.category
OR c3.CATID = p.category
WHERE c.parent = '0'
GROUP BY c.CATID, c.name
ORDER BY c.name ASC
Otros consejos
Creo que quieres mirar al operador de Rollup. Creo que esto te dará lo que quieres.
http://msdn.microsoft.com/ en-us / library / ms189305 (SQL.90) .aspx
Randy