Ver Mensaje Individual
  #15 (permalink)  
Antiguo 13/02/2017, 21:30
Triby2
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 9 años, 9 meses
Puntos: 30
Respuesta: Crear base de datos simulación matriz forzada 5x7

Jose,

Tienes un sistema donde conoces la cantidad depersonas por cada nivel y tambien sabes la cantidad de niveles que permites.

Con lo cual sabes la cantidad de personas que pueden haber en toda la matriz, por eso necesitas esas variables que te comenté mas los contadores.

Con todo eso y una función recursiva puedes conseguir lomque buscas, pero necesitas calmarte para pensar bien en la función.

Sería algo como te ccompart en mi anterior comentsrioí. Aquí lo extenderé un poco más pero espero que te dé la idea de como hacerlo ya que es algo complicado para que funcione bien pero en sí es sencillo si se tiene clara la idea.

Código:
 ramas = 7
 niveles = 5

 NivelActual = 1

funcion consigueReferidos(id) {
  retorna 'SELECT * FROM usuarios WHERE sponsor = id'
}

funcion recorreMatriz(usuario) {
  # Así se consigue la cantidad de referidos de primer nivel del usuario 
  referidos = consigueReferidos(usuario[id])
  totalReferidos = count(referidos)

  si (totalReferidos != ramas)
    # Inserto el usuario en el espacio libre correspondiente de ese nivel
  else {
    # Indico en qué nivel estoy recorriendo la matriz del usuario principal
    NivelActual++
    
    si (NivelActual != niveles) {
      # Inserto el usuario en el espacio libre correspondiente en el proximo nivel con disponibilidad
    
      # consulto los referidos de primer nivel de cada referido directo obtenido
      foreach(referidos as referido)
          recorreMatriz(referido)
      } sino
        # lógica para guardar el usuario fuera de esta matriz actual
   }
}
Si sigues ese esquema y lo programas como te comparto, lo que haria esa función es colocarte al nuevo referido en la primera posición libre que encuentre en el nivel en que se encuentre en ese momento. Esto estaría funciona do con la tabla de usuarios como te comento a continaución.

El diseño de la tabla de usuarios esta bien siempre y cuando el campo codigo sea el id del usuario patrocinador y que ese id sea el mismo que el campo deid de la misma tabla, no como lo que has compartido.

Última edición por Triby2; 13/02/2017 a las 21:52