Ir para conteúdo
Fórum Script Brasil
  • 0

Função Recursiva


Gleison Pereira

Pergunta

Olá a todos os membros do forum, estou precisando de ajuda em uma função que faça o seguinte.

Ela vai fazer uma consulta em uma tabela e vai atribuir o(s) id(s) de um (ou mais) usuario(s) a uma variavel local, uma vez que que ela retorna o id atravéz de um loop este id vai ser atribuido a variavel da função que vai servir de parametro para uma nova consulta.

O objetivo geral desta função é retornar o valor total de um contador que vai ser incrementado a cada volta do loop.

Abaixo segue a função

DELIMITER $$

DROP FUNCTION IF EXISTS `trade`.`indicador` $$

CREATE DEFINER=`root`@`localhost` FUNCTION `indicador`(parametro INTEGER) RETURNS int(11)

BEGIN

DECLARE indicador INTEGER;

DECLARE contador INTEGER;

SET contador = 0;

SET indicador = (SELECT indicador.idusuarios FROM indicador WHERE indicador.idindicador=parametro);

WHILE (SELECT @indicador2:=indicados.idusuarios FROM indicados WHERE indicados.idindicador=indicador) DO

SET indicador = @indicador2;

SET contador = contador+1;

END WHILE;

RETURN contador;

END $$

DELIMITER ;

O problema que encontrei é que o laço não esta sendo executado, gostaria de saber se existe alguma forma de atribuir o resultado da consulta a uma variavel local.

Acho que aqui está o erro.

indicador = (SELECT indicados.idindicador FROM indicador, indicados WHERE indicador.idindicador=indicados.idindicador AND indicador.idindicador=parametro)

Tentei melhorar um pouco o codigo más não retorna nada

DELIMITER $$

DROP FUNCTION IF EXISTS `trade`.`indicador` $$

CREATE DEFINER=`root`@`localhost` FUNCTION `indicador`(parametro INTEGER) RETURNS int(11)

BEGIN

DECLARE indicador INTEGER;

DECLARE contador INTEGER;

SET contador = 0;

SET indicador = (SELECT @indicador:=indicador.idusuarios FROM indicador WHERE indicador.idindicador=parametro);

WHILE (SELECT @indicador2:=indicados.idusuarios FROM indicados WHERE indicados.idindicador=@indicador) DO

SET parametro = @indicador2;

SET contador = contador+1;

END WHILE;

RETURN contador;

END $$

DELIMITER ;

Editado por Gleison Pereira
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...