Sql Father and Children in the Same Table

Asked

Viewed 156 times

0

I have the following question, I have a table in the bank that cannot be changed to facilitate the process. In this table I have records parents and children with the possibility of up to 8 levels. More or less like this, as in the scheme below:

inserir a descrição da imagem aqui

In this example, 123 is original code, which generates 1015, then 1015 becomes origin and generates 2016 and so on, I don’t know if it’s clear? My problem is in searching the values, I’m trying to create a way to search history the original value until I got something, but the user who search for the destination and return the hierarchy in the same way he searches 123 and returns all the way to 2016.

In my case the error happened when the user tried to fetch the value 3017 which is in the example the final destination, and I am not able to create a code return the final values.

My code so far:

function get_origem($con,$origem){

   $sql = "SELECT * FROM tabela WHERE origem = '$origem'";

   $movimentacao = ifx_query($sql,$con) or die(ifx_errormsg());

   $row = ifx_fetch_row($movimentacao);

   // Aqui insiro os valores em uma tabela temporária e depois listo ela com JOIN com outras tabelas.
   // E chamo a função novamente para pegar o próximo filho.

   get_origem($con,$row['destino']);

}

PHP and Informix usage.

1 answer

1


From what I understand you need the search to return the whole tree, even if the criterion is the final item, as in the 3017 example.

The problem is that your code only advances to the destinations and never tests whether there is origin for a certain point. One way would be to add a function to search the origins from the destination.

Maybe this will work:


// FUNCAO PARA SIMPLIFICAR A CHAMADA DA PESQUISA DE AMBOS OS CAMINHOS
function get_origem_destino($criterio){

   // codigo para criar a conexao $con

   get_origem($con,$criterio);
   get_destino($con,$criterio);

}


// FUNCAO PARA PESQUISAR ORIGENS A PARTIR DO DESTINO
function get_origem($con,$destino){

   $sql = "SELECT * FROM tabela WHERE destino = '$destino'";

   $movimentacao = ifx_query($sql,$con) or die(ifx_errormsg());

   $row = ifx_fetch_row($movimentacao);

   // Aqui insiro os valores em uma tabela temporária e depois listo ela com JOIN com outras tabelas.
   // E chamo a função novamente para pegar o próximo PAI.

   get_origem($con,$row['origem']);

}


// SUA FUNCAO ORIGINAL MAS COM NOME DIFERENTE
// pois está buscando o destino a partir da origem 
function get_destino($con,$origem){

   $sql = "SELECT * FROM tabela WHERE origem = '$origem'";

   $movimentacao = ifx_query($sql,$con) or die(ifx_errormsg());

   $row = ifx_fetch_row($movimentacao);

   // Aqui insiro os valores em uma tabela temporária e depois listo ela com JOIN com outras tabelas.
   // E chamo a função novamente para pegar o próximo filho.

   get_origem($con,$row['destino']);

}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.