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!

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top