kania 0 Denunciar post Postado Fevereiro 12, 2009 Olá pessoal, Gente to com um pepino dos grandes aqui para resolver, Vejam me pediram para montar uma tabela de cadastro, porem estes cadastros devem ser divididos em 2 grupos, em sistema de árvore, tipo binário conforme a imagem abaixo Ai preciso epgar e dar um select na tabela para pegar o utimo registro cadastrado dependendo do lado que foi feito oc adastro, ai fiz assim: SELECT MAX(IdConsultor) as IdConsultor FROM cad_consultor WHERE IdPatrocinador = 1 and PERNACADASTRO = 'E' Porem a consulta não esta trazendo o ID que realmente eu preciso como referencia para cadastrar o novo cliente, deixa eu ver se consigo explicar usando a imagem acima com esta imagem consigo demonstrar bem um erro que esotu tendo, iamginemos que o ID:1 primeiro do topo resolva cadastrar alguém do seu lado esquerdo, este deveria cair abaixo do ID:8 (8.5.5) e sua identificação ficaria (12.1.8) 12 seu ID, 1 seu patrocinador, 8 seu Ascendente, para tentar pegar o ID do ascendente que estou tentando utilizar o MAX mas ou eu estou fazendo a consulta de forma errada ou não é com MAX que se faz ou ainda eu precise colocar no banco alguma informação para que a consulta entenda que quando eu peço para pegar o MAX ID do banco de um determinado lado é somente a parte de fora daquela linha e não contar a parte de dentro da linha tipo parte de fora seria os cadastros (Lado esquerdo: 2.1.1, 4.1.2, 5.2.4, 8.5.5 - Lado Direito: 3.1.1, 6.3.3) Lado de dentro (chamada de perna interna) (Lado Esquerdo: 7.2.2 - Lado Direito: 9.3.3, 10.9.3, 11.3.10) O que corre então é isto quando eu dou o Select Max.. ele pega tudo que for referente aquele lado que contenha a identificação 'D' OU 'E' Esquerda ou Direita. Pessoal agguem sabe como resolver este caso? Desde já agradeço a todos Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Fevereiro 12, 2009 Mais uma vez esses malditos esquemas de piramide pra pegar trouxa... Que coisa eh essa de esquerda e direita? um ponto nao pode ter 3 descendentes? Compartilhar este post Link para o post Compartilhar em outros sites
kania 0 Denunciar post Postado Fevereiro 12, 2009 Opa Guiesta, obrigado por sua resposta, porem não entendi sua colocação, sobre "um ponto nao pode ter 3 descendentes" Na verdade um patrocinador pode ter quantos Descendentes ele quizer, pelo que me passaram, porem,como se trata de uma rede binária, o cadastro tem que respeitar o derramamento, logo quando o cara for cadastrar alguém ele deve cair ou no lado direito ou no lado esquerdo conforem a escolha dele só que abaixo do utimo ID cadastrado em um dos lados, e sempre eplos lados de fora, nunca por dentro, ai que a coisa esta ferrando, porque quando eu dou o MAX para pegar o utimo registro ele pega sim o utimo registro só que o utimo referente aquel patrocinador, enão efetivamente o utimo daquele lado. To colocando aqui a modelagem do banco que eu fiz caso você queira dar uma olhada se tem algo errado CREATE TABLE `cad_consultor` ( `IdConsultor` int(11) NOT NULL AUTO_INCREMENT, `IdPatrocinador` int(11) DEFAULT NULL, `IdAscendente` int(11) DEFAULT NULL, `Nome` varchar(150) DEFAULT NULL, `Email` varchar(150) DEFAULT NULL, `DataNascimento` date DEFAULT NULL, `Senha` varchar(30) DEFAULT NULL, `Sexo` varchar(1) DEFAULT NULL COMMENT 'F=Femenino, M=Masculino', `TipoPessoa` varchar(1) DEFAULT NULL COMMENT 'F = Física, J = Jurídica', `CpfCnpj` varchar(18) DEFAULT NULL, `Rg` varchar(25) DEFAULT NULL, `Cep` varchar(10) DEFAULT NULL, `Endereco` varchar(255) DEFAULT NULL, `Numero` varchar(10) DEFAULT NULL, `Complemento` varchar(50) DEFAULT NULL, `Bairro` varchar(50) DEFAULT NULL, `Cidade` varchar(50) DEFAULT NULL, `Estado` varchar(2) DEFAULT NULL, `Pais` varchar(25) DEFAULT NULL, `TelRes` varchar(13) DEFAULT NULL, `TelCel` varchar(13) DEFAULT NULL, `Banco` varchar(100) DEFAULT NULL, `Agencia` varchar(25) DEFAULT NULL, `Conta` varchar(25) DEFAULT NULL, `TipoConta` varchar(1) DEFAULT NULL COMMENT 'C = Corrente - P = Pupança', `NivelQuali` varchar(2) DEFAULT '1' COMMENT 'Nivel de Qualificação do Consultor - 1:Consultor, 11:Consultor Silver, 12:Consultor Gold, 13: Consultor Platinium, 21:Diretor Silver, 22:Diretor Gold, 23:Diretor Platinum, 31:Premium Asa 1, 32: Premium Asa 2, 33:Eagle', `PernaCadastro` varchar(1) DEFAULT NULL COMMENT 'D = Direita, E = Esquerda', `PernaPadrao` varchar(1) DEFAULT NULL COMMENT 'D = Direita, E = Esquerda', `DataCadastro` date DEFAULT NULL, `Acessos` varchar(20) DEFAULT '0', `Contrato` int(1) DEFAULT '1' COMMENT '1 = Sim 2= Não', PRIMARY KEY (`IdConsultor`) ) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8; Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Fevereiro 12, 2009 esquerda , direita... nao pode ficar no meio por exemplo? Compartilhar este post Link para o post Compartilhar em outros sites
kania 0 Denunciar post Postado Fevereiro 12, 2009 hehehe, se pudesse....mas infelizmente tem que seguir as regras solicitadas pelo cliente, to aqui em cima do manual do mysql para ver como corrigir isto, não sei se mecho no banco de dados, apesar que nem sei onde mecher tbm no bd, talvez adcionar mais um campo para que poça ser utilizado como condição, sei lá. hehehe Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Fevereiro 12, 2009 sinceramente, o erro ta em você trabalhar nesse tipo de "empresa" :x mas eu vou dar uma olhada e quebrar o teu galho Compartilhar este post Link para o post Compartilhar em outros sites
kania 0 Denunciar post Postado Fevereiro 12, 2009 Obrigado, mas infelizmente todos temos que trabalhar, e o emprego não esta tão simples de se achar assim, não da para ficar escolhendo em emprego Compartilhar este post Link para o post Compartilhar em outros sites