es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo obtener el primer padre por ID de hijo con una consulta de MySql o PHP?

Tengo esta tabla:

id nombre parent_id
1 mike 0
2 jeff 0
3 bill 2
4 sara 1
5 sam 4
6 shai 5

Quiero encontrar el nombre y id del primer padre al enviar el id O parent_id:

Por ejemplo:

Si envío el id 6 (shai) quiero mostrar que el primer padre se llama mike (id:1), pero mi consulta solo muestra al padre anterior y cuando envío 6 como id solo muestra a sam (id:5).
¿Cómo puedo encontrar el primer padre mediante una consulta SQL o código PHP?

Este es mi código:

SELECT child.id, child.name, child.parent_id, parent.name as ParentName FROM test child JOIN test parent ON child.parent_id = parent.id WHERE child.id=6;
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para encontrar el nombre y el ID del primer padre enviando el ID o parent_id de un hijo, puedes usar una consulta recursiva en SQL. Aquí hay un ejemplo de consulta que debería funcionar para la tabla que proporcionaste:

    WITH RECURSIVE parents AS (
      SELECT id, name, parent_id
      FROM test
      WHERE id = [CHILD_ID] OR parent_id = [CHILD_ID]  -- reemplaza [CHILD_ID] con el ID que deseas buscar
      UNION ALL
      SELECT test.id, test.name, test.parent_id
      FROM test JOIN parents ON test.id = parents.parent_id
    )
    SELECT id, name
    FROM parents
    WHERE parent_id = 0; -- esto te dará el primer padre (el padre sin ningún padre)
    

    En la consulta, comenzamos seleccionando las filas que coinciden con el ID del hijo que queremos buscar o su parent_id. Luego, usamos una unión recursiva para seleccionar filas adicionales que son los padres de esas filas. Esto continúa hasta que llegamos al primer padre (un padre sin su propio padre).

    Finalmente, seleccionamos el ID y el nombre del primer padre, que debería ser el padre final del hijo que buscamos. Asegúrate de reemplazar [CHILD_ID] con el ID real que deseas buscar.

Comments are closed.