Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pesoal, sou iniciante em php e novamente conto coma ajuda de você pra resolver mais um pequeno grande probleminha.
Meu problema é o seguinte, estou contruindo um sistema de afiliados com matriz forçada por 3, ou seja cada afiliado so pode ter 3 novos afiliados.
tenho 3 campos na tabela usuarios que irão receber o id de cada afiliado quando ele for cadastrado.
sempre que um novo usoario se cadastra atualizo um desses campos com o id do novo membro.
com uma sql eu verifico se ha espaço vazio na tabela do usuario e qual campo é esse
com outra sql eu atualizo as informações.
o problema é que tenho medo de dois membros se cadastrarem simultaneamente e o mysql executar duas operações simultaneas fazendo com que possivelmente o usuario patrocinador passe a ter 4 afiliados, coisa que não pode
pensei em fazer uma query que verificasse e atualizasse de uma so vez (com SELECT e UPDATE na mesma sql) mais não sei se isso é possivel,
então fiz duas sql, uma pra verificar se o espaço está vazio e outra pra atualizar diminuindo assim a chance de erro mais não ta dando certo tmb,
por favor se alguem puder me da uma luz vou ficar eternamente grato!
Forte abraço a todos
<?php
include "../includes/config.php";
$id_aff = 7;
$cln = "idx3_af02"; //nome do campo
$id_x3 = 10;
$sql_sct = "SELECT * FROM `usuarios` WHERE $cln = '0' AND id_usuario = $id_x3";
$sql_up = "UPDATE usuarios SET $cln='$id_aff' WHERE id_usuario = $id_x3";
$query_3x3 = mysql_query($sql_sct) or die ("Não foi possivel Consultar.");
$exist_3x3 = mysql_num_rows($query_3x3);
echo "$sql_sct, $sql_up<br>";
if (mysql_query($sql_sct, $sql_up)){
echo $exist_3x3;
}
else{
echo "Não fez";
}
?>>
sua logica pode ser melhorada, como você amarra um afiliado novo com o existente?
partindo da ideia de que se tenho treis campos em uma tabela, onde cada campo recebe o id de um novo membro, logicamente só poderão ser 3 afiliados, nesse caso o que conta é se os 3 campos do patrocinador estão oucupados.
outra ideia seria amarrar através do campo do afiliado que iria receber o id do patrocinador, controlando com mysql_num_rows(); e verificando se já existem 3 afiliados, no entanto isso não resolveria o meu problema, e possibilitaria que um afiliado pudesse ter um numero infinitos de afiliados, não fosse o efeito da função mysql_num_rows(); e isso pode ter que me fazer gerar um log quando houver mais que 3 rows, e ter que corrigir artezanalmente.
Minha matriz é 3x3
Minha tabela tem os campos 'filho_01', 'filho_02', 'filho_03', 'pai', 'avo', e 'bisavo' isso coordena toda a minha rede.
para exibir a rede irei contruir 3 niveis, um seleciona os registros que tem o id "X" no campo 'pai', outro seleciona o os qeu tem id "x" no campo 'avo'... Caso haja erro e um desses tenha 4 registros, essa rede vai ficar bagunçada e gerar uma bagunça tremenda e possivelemtne incorrigivel, por isso que preciso considerar valida a ideia de usar os treis campos de afiliados, ou seja o primeiro exemplo
Para progressão da rede necessito de usar os campos 'filho_01', 'filho_02', 'filho_03', pois esses não permitem que um erro evolua.
no entanto permitem que o mesmo campo possa ser editado quase que simultaneamente, conferindo a dois registros simultaneamente a herança dos campos 'pai', 'avo', e 'bisavo'.
nesse caso o erro vai fazer com qeu um patrocinador receba comissão de 4 afiliados, só que só possa enxergar 3 deles, porque um foi atualizado imediatamente apos ser incluido.
minha unica chançe de eliminar a possibilidade de erro seria a existencia de uma consulta que faria SELECT e UPDATE simultaneamente
ou executar duas sql dentro da mesma "mysql_query($sql_1, $sql_1);"
Até pensei que pudesse ser feito da sguinte forma:
UPDATE usuarios SET idx3_af02='7' WHERE id_usuario = 10 IN ( id_usuario = 10 AND idx3_af02 = '0')
mais como disse não tenho muito conhecimento no assunto, mais enquanto isso vou pesquisando.
Forte abraço a todos
Olá pessoal,
resolvi o problema mais grave apenas trocando a sql pra:
$sql_up = "UPDATE usuarios SET $cln='$id_aff' WHERE id_usuario = $id_x3 AND $cln = '0'";
dessa forma ele so edita se o campo $cln estiver vazio, no entanto não da erro caso não consiga editar,
Preciso agora arrumar uma forma de verificar se a sql editou o campo, mais isso eu posso fazer amanhã, assim ja ta bem mais sguro, isso me fez ver que extensas horas de trabalho a fio nos fazem não enxergar o obvio, não aguento mais trabalar!!!!
Para ver quantas linhas foram modificadas, utilize mysql_affected_rows.
http://br.php.net/mysql_affected_rows
Carlos Eduardo
sua logica pode ser melhorada, como você amarra um afiliado novo com o existente?