Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/06/2015, 19:09
efren315
 
Fecha de Ingreso: septiembre-2013
Mensajes: 32
Antigüedad: 10 años, 7 meses
Puntos: 0
recorrer una matrix

Hola amigos, escribo por aqui en busca de ayuda, quein pueda por favor.
tengo lo siguiente campos en BD

tb_matrix

campo 1 -> id
campo 2 -> userd_id
campo 3-> parent_id

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

ahora estoy tratando de hacer la matriz forzada de la siguiente manera:

tenemos al usuario con ID:

tb_users
campo 1 = ID
campo 2 = username
campo 3 = referer

el ancho de la matriz es 3 " pero puede ser mas o menos " por el momento es 3.

ahora quiero que al usuario afiliar un nuevo miembro este se coloque como su parent_id , esto ya lo tengo, claro siempre que ya este usuario no tenga el limite del ancho que es 3.

me explico:

usuario ID=1 afilia a usuario ID=2 , este ID=2 sera un hijo de ID=1 y lo insertamos en tb_matrix de la siguiente manera:

campo ID = autoIncrement
campo userd_id = colocamos su ID que es 2
campo parent_id = colocamos el id de quien lo refiere en este caso es 1

lo hago con esto:

Código PHP:
// obtengo array
function db_result_to_array($query)
{
   
$result=mysql_query($query);
   
$res_array = array();
 
   for (
$count=0$row = @mysql_fetch_array($result); $count++)
     
$res_array[$count] = $row;
 
   return 
$res_array;
}
 
 
$max_ancho 3// el ancho de la matrix
 
$user_id=mysql_insert_id(); // obtenemos el ID del usuario que se acaba de registrar
 
// funcion para agregar nuevo usuario//
 
function agregar_nuevo($user_id){
 
$referer=db_result_to_array("SELECT referer FROM tb_users WHERE id=$user_id"); // obtengo el referer
 
if (!$referer[0][0]){
 
// si el usuario no tiene referer procedemos a insertar alguno de los ultimos que se registraron
 
}else{ // si el usuario si tiene referer buscaremos en la tb_matrix si este tiene espacio o no
 
$id_referrer $user_referer[0][0]; // obtengo el id del referer
$result incompleto_matrix_users($id_referrer$max_ancho);  // llamo la funcion para que haga la busqueda en la BD
}
$tar_user_id $result;
$insert mysql_query("INSERT INTO tb_matrix (user_id, parent_id) values ('".$user_id."', '".$tar_user_id."')");
 
 return 
$insert;
 
}
 
// llamo la funcion para agregar nuevo usuario a la matrix
 
agregar_nuevo($user_id); 
ahora eso esta bien hasta que me toca llamar la funcion ( incompleto_matrix_users )

Código PHP:
function incompleto_matrix_users($id$max_ancho){
 
       
$childs db_result_to_array("SELECT user_id FROM tb_matrix WHERE parent_id = '$id' "); // obtenemos los hijos
 
       
if (count($childs) < $$max_ancho || !$childs){ // contamos si tiene menos del ancho de la matrix (3) le colocamos el mismo referer
            
return $incomplete_users[] = $id// asgnamos el mismo referer
        
}
 
// en caso de que el referer ya tenga 3 referidos procedemos
 
        
for ($i=0$i count($childs) ; $i++) {
 
            return 
incompleto_matrix_users($childs[$i][0],$max_ancho); // volvemos a llamar la funcion para buscar entre sus referidos del referer
        
}
 

ok, todo va bien hasta que haciendo pruebas no me percate de que la funcion ncompleto_matrix_users();
hace bien su trabajo solo con el primero de los tres referidos que tiene

me explico mejor:

si el usuario ID=1 afilia un nuevo referido ID=5 llamaremos la funcion para agregar , buscaremos si el usuario ID=1 tiene menos de 3 referidos colocaremos parent_id = 1 hasta aqui bien.

ahora:

usuario ID=1 tiene ya sus 3 referidos que son
usuario ID=2 parent_id=1
usuario ID=3 parent_id=1
usuario ID=4 parent_id=1

como el usuario ID=1 ya tiene sus 3 la funcion va a tomar unos de sus 3 referidos, pero resulta que me devuel al ID=2
pero usuario ID = 2 ya tiene sus 3 referidos que son:
usuario ID=6 parent_id=2
usuario ID=7 parent_id=2
usuario ID=8 parent_id=2

aqui esta el problema que la funcion me devuelve es el usuario ID=6

pero estoy intentando es que me devuelva en caso de que los referidos del usuario ID=1
el ID=2 ya tiene sus 3, entonces busque al usuario ID=3 que es referidos de ID=1, y si en caso de que usuario ID=3
ya tengas sus 3 referidos, busque al tercer referido de Id=1 que seria ID=4 y sino entonces este proceda a buscar en los 3 ref del usuario ID=2, y asi sucesivamente hasta encontrar un espacio, pero quiero que lo haga de esa manera.

todo hasta la profundida que se coloque

si alguien me pueda ayudar seria de mucha ayuda

Última edición por efren315; 05/06/2015 a las 19:17