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