Foros del Web » Programando para Internet » PHP »

recorrer una matrix

Estas en el tema de recorrer una matrix en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 05/06/2015, 19:09
 
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
  #2 (permalink)  
Antiguo 07/06/2015, 22:57
Avatar de enlinea777  
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 15 años, 10 meses
Puntos: 127
Respuesta: recorrer una matrix

La solucion es muy,muy,muy profunda para ti.

usa funciones recursibas.
si no saves que es pues te aconsejo una buena busqueda en google
  #3 (permalink)  
Antiguo 08/06/2015, 00:41
 
Fecha de Ingreso: septiembre-2013
Mensajes: 32
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: recorrer una matrix

Cita:
Iniciado por enlinea777 Ver Mensaje
La solucion es muy,muy,muy profunda para ti.

usa funciones recursibas.
si no saves que es pues te aconsejo una buena busqueda en google
Hola, la idea es que si respondes aportes, y no crees que si publique en el foro, no sera porque ya busque y no encontre? si lees el codigo uso funcion recursiva pero se salta.
  #4 (permalink)  
Antiguo 08/06/2015, 07:55
Avatar de enlinea777  
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 15 años, 10 meses
Puntos: 127
Respuesta: recorrer una matrix

No puedes llamar a $max_ancho si no es parte de la funcion.
  #5 (permalink)  
Antiguo 08/06/2015, 13:36
 
Fecha de Ingreso: septiembre-2013
Mensajes: 32
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: recorrer una matrix

Cita:
Iniciado por enlinea777 Ver Mensaje
No puedes llamar a $max_ancho si no es parte de la funcion.
Creo que no estas viendo bien, $max_ancho lo asigno arriba.

Código PHP:
$max_ancho 3// el ancho de la matrix 

$id_referrer $user_referer[0][0]; // obtengo el id del referer 

incompleto_matrix_users($id_referrer$max_ancho);  // llamo la funcion para que haga la busqueda en la BD 

// la funcion

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 
        

  

  #6 (permalink)  
Antiguo 08/06/2015, 13:39
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: recorrer una matrix

En la siguiente linea:
Código PHP:
Ver original
  1. if (count($childs) < $$max_ancho || !$childs){

¿Tu colocaste $$max_ancho sin querer o sí sabes lo que produce?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 08/06/2015, 19:28
 
Fecha de Ingreso: septiembre-2013
Mensajes: 32
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: recorrer una matrix

Cita:
Iniciado por pateketrueke Ver Mensaje
En la siguiente linea:
Código PHP:
Ver original
  1. if (count($childs) < $$max_ancho || !$childs){

¿Tu colocaste $$max_ancho sin querer o sí sabes lo que produce?
si esta demas el $ no me fije al escribir , pero eso no es lo que afecta. la funcion al ser llamada hace su trabajo pero no como quisiera. y es lo que pregunto quien aporta
  #8 (permalink)  
Antiguo 08/06/2015, 19:43
Avatar de enlinea777  
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 15 años, 10 meses
Puntos: 127
Respuesta: recorrer una matrix

Cita:
Iniciado por efren315 Ver Mensaje
Creo que no estas viendo bien, $max_ancho lo asigno arriba.
en la funcion agregar_nuevo donde estas asignandolo???
  #9 (permalink)  
Antiguo 08/06/2015, 19:45
Avatar de enlinea777  
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 15 años, 10 meses
Puntos: 127
Respuesta: recorrer una matrix

debuguea

pone echos o print en las funciones para tener una idea de como se esta ejecutando tu codigo.
  #10 (permalink)  
Antiguo 15/06/2015, 00:04
 
Fecha de Ingreso: septiembre-2013
Mensajes: 32
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: recorrer una matrix

Nadien entonces?

Etiquetas: mysql, select, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:37.