Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

194
Vistas
Cómo crear una solicitud SQL dura en MySQL (recursión)

Lo siento por mi inglés no perfecto, pero necesito ayuda.

Escuché que la versión 5 no admite la recursividad en la consulta, pero la versión 8 sí. También escuché que puede omitir la limitación de la versión 5 y realizar una consulta recursiva.

Hay una tabla de este tipo con datos, por ejemplo.

 CREATE TABLE `Example` ( `id` int NOT NULL, `parent_id` int NOT NULL DEFAULT '1', `name` varchar(512) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8_general_ci; INSERT INTO `Example` (`id`, `parent_id`, `name`) VALUES (1, 0, 'Something 1'), (2, 1, 'Something 2'), (3, 2, 'Something 3'), (4, 1, 'Something 4');

De esta tabla, tengo que obtener datos de esta forma: Esta es una matriz de objetos, dentro de la cual hay claves con datos de la tabla y un valor de datos, que también es una matriz de objetos.

 [ { id: 1, name: 'Something 1', parent_id: 0, data: [ { id: 2, name: 'Something 2', parent_id: 1, data: [ { id: 3, name: 'Something 3', parent_id: 2, data: [] }, ], }, { id: 4, name: 'Something 4', parent_id: 1, data: [] }, ], }, ]
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Esta no es una solución completa, pero espero que alguien pueda completarla o que pueda hacerlo en un lenguaje de programación después de aquí.

 WITH recursive cte_name AS ( SELECT id, parent_id, NAME, 1 lvl FROM example test UNION ALL SELECT e.id, e.parent_id, e.NAME, lvl+1 FROM cte_name c INNER JOIN example e ON c.id = e.parent_id ), rec_tab AS ( SELECT id, parent_id, NAME, row_number() OVER (partition BY parent_id, NAME ORDER BY lvl DESC) AS path_pattern FROM cte_name), path_tab as ( SELECT id, group_concat(DISTINCT parent_id ORDER BY path_pattern DESC separator ' ') path FROM rec_tab GROUP BY id) select * from path_tab;

Como puede ver, la ruta comienza desde 0 (cero) para cada raíz.

ingrese la descripción de la imagen aquí

Si alguien completa la solución para el formato solicitado, también lo agradecería.

¡Gracias!

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda