Consulta MySQL

eXtreM3

Hola, sé que os gusta el tema de las consultas, así que vengo a preguntar por una.

Tengo esta tabla:

categoryId: ID de la categoría.
parentId: indica si una categoría tiene padre. Si vale 0 es que es padre de primer nivel. Si vale cualquier otro número es el ID de la categoría padre a la que pertenece dicha categoría.
name: nombre.
position: posición para una posterior ordenación, a priori no influye.
type: hay que filtrar las que sean type = 1.

Cómo tiene que devolver las filas:

Para hacernos una idea del árbol, una vez filtrado por type = 1, quedaría así:

  • Sin categoría
  • Hardware
    ---- Tarjetas gráficas
    -------- NVIDIA
    -------- ATI
    ---- Auriculares
  • Cuadernos

¿Es posible hacer una consulta que los devuelva así de ordenados? Es decir, que por cada categoría padre muestre sus hijos por debajo (parentId = categoryId)

He intentado hacerlo con group by pero no sirve. Creo que hay que hacer una subconsulta, pero la verdad es que no se me ocurre, porque directamente no sé si es posible.

Con PHP puedo manejar los datos tranquilamente y ordenarlos con foreach, pero quiero saber si hay manera de que directamente los devuelva ordenados la consulta.

Gracias :si:

DarkSoldier

hablo sin tener mucho conocimiento pero es bastante complejo con un SQL, te sirve un procedure?

CrIpI

Te recomiendo hacer eso programado no en consulta

Makalister

a base de subconsultas sabiendo que seria n hijos maximo podrias sacar pero es una consulta hiper fea, si necesitas rendimiento sacas el arbol y lo caches. como dicen por ahi mejor programando

wineMan

-

Usuarios habituales

  • wineMan
  • Makalister
  • CrIpI
  • DarkSoldier
  • eXtreM3