sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo obtener categorías y subcategorías en una sola consulta en sql? (mysql)

Si pregunta "¿Hay consultas recursivas en mysql?" responde "NO".

Pero hay un muy buen enfoque para manejarlo.

Crear tabla de ayuda (diciendo CatJerarchy)

CatHierarchy:
    SuperId, ChildId, Distance
------------------------------ 
     1          1         0
     1          2         1
     2          2         0

Estos datos redundantes permiten fácilmente en 1 consulta seleccionar cualquier jerarquía, y en 2 inserciones admiten cualquier jerarquía (la eliminación también se realiza en 1 consulta con la ayuda de eliminar la integridad en cascada).

Entonces, qué significa esto. Realiza un seguimiento de todas las rutas en la jerarquía. Cada nodo de Cat debe agregar una referencia a sí mismo (distancia 0), luego admitir la duplicación agregando datos redundantes sobre los nodos vinculados.

Para seleccionar una categoría con sub simplemente escriba:

 SELECT c.* from Category c inner join CatHierarchy ch ON ch.ChildId=c.cat_id
      WHERE ch.SuperId = :someSpecifiedRootOfCat

someSpecifiedRootOfCat - es un parámetro para especificar la raíz de la categoría ¡ESO ES TODO!