Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

kania

Select em Sistema Binario

Recommended Posts

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, Para quem não conhece, o marketing multinivel consiste no seguinte:

Você entra no marketing e coloca duas pessoas abaixo de você, uma a sua direita e outra a esquerda. E estas pessoas irão fazer o mesmo, ao final de cada periodo, deve-se gerar a comissão pelas vendas de produtos que toda a rede fez para daí ser calculado seu percentual de comissão tipo binário conforme a imagem abaixo

 

Imagem Postada

 

Meu primeiro problema encontrado já na hora de cadastrar.

Preciso pegar e dar um select na tabela para pegar o utimo registro cadastrado dependendo do lado que foi feito oc adastro, sendo que as pernas internas não podem entrar na consulta, 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.

 

estou colcoando aqui a modulagem do banco de dados que fiz, para verem se fiz algo de errado, afnal derrpente estou comendo bola no BD, desde ontem estou debruçado sobre tudo do MySql para ver se tem algum comando, clausula que eu possa usar para pegar este ID

 

# MySQL-Front 5.0  (Build 1.210)

/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE */;
/*!40101 SET SQL_MODE='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES */;
/*!40103 SET SQL_NOTES='ON' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS */;
/*!40014 SET FOREIGN_KEY_CHECKS=0 */;


# Host: localhost	Database: grupoeagle
# ------------------------------------------------------
# Server version 5.1.30-community

USE `grupoeagle`;

#
# Table Objects for table cad_consultor
#

DROP TABLE IF EXISTS `cad_consultor`;
CREATE TABLE `cad_consultor` (
  `IdConsultor` int(11) NOT NULL AUTO_INCREMENT,
  `IdPatrocinador` int(11) DEFAULT NULL,
  `IdAscendente` int(11) DEFAULT NULL,
  `PernaCadastro` varchar(1) DEFAULT NULL COMMENT 'D = Direita, E = Esquerda',
  `PernaPadrao` varchar(1) DEFAULT NULL COMMENT 'D = Direita, E = Esquerda',
  `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',
  `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=54 DEFAULT CHARSET=utf8;

#
# Dumping data for table cad_consultor
#
LOCK TABLES `cad_consultor` WRITE;
/*!40000 ALTER TABLE `cad_consultor` DISABLE KEYS */;

INSERT INTO `cad_consultor` VALUES (1,1,1,'D','D','Grupo Eagle Ltda','eagle@grupoeagle.com.br','2009-02-01','123456','M','J','000.000/0001-00','5.957.007-2','82630490','Estrada de Santa Cândida','474','Casa E','Santa Cândida','Curitiba','PR','Brasil','(41)3257-7941','(41)9999-9999','356 - BANCO ABN AMRO REAL S.A.','1234','123456-7','P','1','2009-02-06','8',NULL);
INSERT INTO `cad_consultor` VALUES (2,1,1,'E','E','Jorge Fabiano de Carvalho Kania','eagle@grupoeagle.com.br','1975-01-30','123456','M','F','866.554.509-34','5.957.007-2','82630490','Estrada de Santa Cândida','474','Casa E','Santa Cândida','Curitiba','PR','Brasil','(41)3257-7941','(41)9999-9999','356 - BANCO ABN AMRO REAL S.A.','1234','123456-7','P','33','2009-02-06','7',NULL);
INSERT INTO `cad_consultor` VALUES (44,1,1,'D','D','Teste',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,'1',NULL,'0',1);
INSERT INTO `cad_consultor` VALUES (45,1,2,'E','E','teste 2',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,'1',NULL,'0',1);
INSERT INTO `cad_consultor` VALUES (46,2,45,'E','E','teste 3',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,'1',NULL,'0',1);
INSERT INTO `cad_consultor` VALUES (47,44,44,'D','D','teste 4',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,'1',NULL,'0',1);
INSERT INTO `cad_consultor` VALUES (48,2,2,'D','D','Teste 5',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,'1',NULL,'0',1);
INSERT INTO `cad_consultor` VALUES (49,46,46,'E','E','teste 6',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,'1',NULL,'0',1);
INSERT INTO `cad_consultor` VALUES (50,44,44,'E','E','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,'1',NULL,'0',1);
INSERT INTO `cad_consultor` VALUES (51,44,50,'E','E','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,'1',NULL,'0',1);
INSERT INTO `cad_consultor` VALUES (52,44,51,'E','E',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1',NULL,'0',1);
INSERT INTO `cad_consultor` VALUES (53,50,51,'D','D',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1',NULL,'0',1);
/*!40000 ALTER TABLE `cad_consultor` ENABLE KEYS */;
UNLOCK TABLES;

/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;

Também estou disponibilizando um código que fiz para ver se os dados do banco estavam entrando corretamente, é claro que os dados do banco forma colocados na mão direto no banco, algo que terá que ser feito direto pelo código depois.

 

<!--#include file="conecta/conn.asp" -->
<%
IdPatrocinador =  1

	Set RsAs = Server.CreateObject("adodb.recordset")
	SQL = "SELECT COUNT(IdAscendente) as TotalCadE from cad_consultor where IdAscendente = '" & IdPatrocinador & "' and PernaCadastro = 'E'"
	RsAs.Open SQL,Conn,3,3
	
	IF RsAs("TotalCadE") < "1" Then
		
		Set RsAs2 = Server.CreateObject("adodb.recordset")
		SQL = "SELECT COUNT(IdAscendente) as TotalCadD from cad_consultor where IdAscendente = '" & IdPatrocinador & "' and PernaCadastro = 'D'"
		RsAs2.Open SQL,Conn,3,3
		
		IF RsAs2("TotalCadD") < "1" Then
			
			PernaCadastro = "Ainda nao tem um cadastrado na perna Esquerda<br>"
		
			Set RsP = Server.CreateObject("adodb.recordset")
			SQL = "select * from cad_consultor where IdConsultor = '" & IdPatrocinador & "'"
			RsP.Open SQL,Conn,3,3
							
			PernaCadastro = "Ainda nao tem um cadastrado na perna Direita: "&RsP("PernaCadastro")
			
			RsP.Close
			Set RsP = Nothing
		
		Else
		
			Set RsP = Server.CreateObject("adodb.recordset")
			SQL = "select * from cad_consultor where IdConsultor = '" & IdPatrocinador & "'"
			RsP.Open SQL,Conn,3,3
							
			PernaCadastro = "Ja tem um cadastrado na perna Direita: "&RsP("PernaPadrao")
							
			RsP.Close
			Set RsP = Nothing
		
		End If
		
	Else
			
		Set RsP = Server.CreateObject("adodb.recordset")
		SQL = "select * from cad_consultor where IdConsultor = '" & IdPatrocinador & "'"
		RsP.Open SQL,Conn,3,3
						
		PernaCadastro = "Ja tem um cadastrado na perna Esquerda: "&RsP("PernaPadrao")
							
		RsP.Close
		Set RsP = Nothing			
			
	End if
	
	Set Rs = Server.CreateObject("adodb.recordset")
	SQL = "SELECT MAX(IdConsultor) AS ASCENDENTE from cad_consultor where PernaCadastro = 'e'"
	Rs.Open SQL,Conn,3,3
	
	Response.Write PernaCadastro&"<br>Proximo cadastro Ascendente: "&RS("Ascendente")&"<br><br><br>"
	
	Rs.Close
	Set Rs = Nothing
	
	'====================================================================
	'====================================================================
	'REDE LINEAR
	'====================================================================
	'====================================================================
	Set Rs = Server.CreateObject("adodb.recordset")
	SQL = "select * from cad_consultor where IdConsultor = '" & IdPatrocinador & "'"
	Rs.Open SQL,Conn,3,3
	
	Pat = Rs("IdConsultor")
	
	
	Set Rs2 = Server.CreateObject("adodb.recordset")
	SQL = "select * from cad_consultor where IdPatrocinador = '" & Pat & "'  and IdConsultor <> '1'"
	Rs2.Open SQL,Conn,3,3
	
	Response.Write Rs("Nome")&" | "&Rs("IdConsultor")&"<br>"
	Response.Write"=============================<br>"
	Do until RS2.EOF
	
	Pat2 = Rs2("IdConsultor")
	Response.Write "<font face=""Tahoma, Geneva, sans-serif"" color=""#006600"" size=""3px"">Primeira Linha >> "&Rs2("IdConsultor")&" -  "&Rs2("PernaCadastro")&"</font><br>"
	
	
		Set Rs3 = Server.CreateObject("adodb.recordset")
		SQL = "select * from cad_consultor where IdPatrocinador = '" & Pat2 & "'"
		Rs3.Open SQL,Conn,3,3
		
		Do until RS3.EOF
		
		Pat3 = Rs3("IdConsultor")
		Response.Write "      |_<font face=""Tahoma, Geneva, sans-serif"" color=""#FF0000"" size=""3px"">Segunda Linha >> "&Rs3("IdConsultor")&" - "&Rs3("PernaCadastro")&"</font><br>"
		
		
			Set Rs4 = Server.CreateObject("adodb.recordset")
			SQL = "select * from cad_consultor where IdPatrocinador = '" & Pat3 & "'"
			Rs4.Open SQL,Conn,3,3
			
			Do until RS4.EOF
			
			Response.Write "            |_<font face=""Tahoma, Geneva, sans-serif"" color=""#0066FF"" size=""3px"">Terceira Linha >> "&Rs4("IdConsultor")&" - "&Rs4("PernaCadastro")&"</font><br>"
			
			RS4.movenext
			loop
			
			Rs4.Close
			Set Rs4 = Nothing
			
		RS3.movenext
		loop
			
		Rs3.Close
		Set Rs3 = Nothing
		
	RS2.movenext
	loop
	
	Rs2.Close
	Set Rs2 = Nothing
%>

Pessoal alguem sabe como resolver esta primeira situação? Desde já agradeço a todos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gente achei aqui no froum de Lógica um Script em PHP que alguém já fez do mesmo problema só que como nunca mechi com PHO nem entendi oque ele quiz fazer

 

// -------------------------------------------------------------------------------------------------------------------------------------------
function pontos($valor)
{
$i = 0;
$x = 0;
$y = 0;
$statc = "1";

$busca_propria = mysql_query("SELECT pontos FROM mlm_pontos WHERE id = ".$valor);
$result = @mysql_fetch_array($busca_propria);

while($statc != 0)
{
$busca = mysql_query("SELECT id FROM mlm_cadastros WHERE supervisor = ".$valor);

if(@mysql_num_rows($busca) > 0)
{
while($linha = mysql_fetch_array($busca))
{
$vetor[$i] = $linha[0];
$i++;
}

$valor = $vetor[$x];
$x = $x + 1;
} else {
$statc = 0;
}
}

while(!empty($vetor[$y]))
{
$busca_pontos = mysql_query("SELECT pontos FROM mlm_pontos WHERE id = ".$vetor[$y]);
$pontos = mysql_fetch_array($busca_pontos);

$total = $total + $pontos[0];
$y++;
}

$total = $total + $result[0];

return $total;
}
// -------------------------------------------------------------------------------------------------------------------------------------------

 

No caso dele ele já conseguiu cadastrar no Banco, eu ainda não consegui, hehe

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.