Ver Mensaje Individual
  #3 (permalink)  
Antiguo 20/12/2013, 06:25
nksn
 
Fecha de Ingreso: mayo-2009
Ubicación: Japon
Mensajes: 60
Antigüedad: 15 años
Puntos: 12
Respuesta: Problema, Sistemas de amigos

suponiendo que tienes una tabla "común" de usuarios, la cual tenga un campo primario id único, has una tabla en la cual se generen las conexión mediante este id

has una tabla con los campos [ id , p1, p2, status ], has un index único con "p1", "p2" y "status" para ganar velocidad en las cargas/busquedas

id = numero del registro
p1 = usuario que propuso la amistado
p2 = usuario invitado a tener amistad
status = estado de la petición

En status usa un tinyint(1) con valores [ -1, 0 ,1, 2 ]

-1 = bloqueado
0 = no visto/ chequeado por el invitado
1 = rechazado
2 = aceptado

amigos = SELECT count(*) FROM tabla WHERE (p1 = user_id OR p2 = user_id) AND status = 2
peticiones = SELECT count(*) FROM tabla WHERE (p1 = user_id OR p2 = user_id) AND status = 0

el resto ya puedes imaginártelo...


de esta forma no tienes que crear un record para cada parte, evitas duplicados y nodos sueltos