PHP: Sistema de amigos

vincen

Bien, estoy pensando en la forma de hacer el sistema, pero solo se me ocurre esta forma y no me parece las mas correcta.

BOTON AÑADIR AMIGOS

al pulsar [Añadir] "X" manda invitacion a "Y"
en la db lo guarda de esta forma: [ invitacion de "X" para "Y" con estado PENDIENTE(1) ]

PAGINA DE SOLICITUDES de "Y"

Tienes una Peticion de amistad de "X"
[Aceptar] Cambiariamos el estado de la solicitud de PENDIENTE(1) a ACEPTADA(2) y hariamos 1 INSERT a "X" y "Y" en CUENTAS > AMIGOS con el nombre del amigo
[Ignorar] Cambiariamos el estado de la solicitud a IGNORADA(3)

MOSTRAR AMIGOS EN PERFIL de "X"

Hacemos una consulta a CUENTAS > AMIGOS de "X" y mostramos todos los resultados.

Amigos: X, Y, Z, A, B, C

No me acaba de convencer la forma en la que tengo pensado hacerlo, ya que me estarian todos los amigos en la misma columna y a la hora de hacer una consulta seria mas complicado sacar X amigo. Vamos que tengo un lio en la cabeza que pa que.

Necesito algun metodo mejor

RaymaN

Crea una tabla intermedia "amigos" donde tienes id_user1, id_user2, fecha_aceptacion.

1 respuesta
vincen

#2
si
"JUAN" acepta a "PEDRO"
o
"PEDRO" acepta a "JUAN"

Hago 2 inserts a la vez en la tabla intermedia "amigos":

id_user1, | id_user2, | fecha_aceptacion.

Juan | Pedro | 15/10/2013:21:00:10

y

id_user1, | id_user2, |fecha_aceptacion.

Pedro | Juan | 15/10/2013:21:00:10

Entonces si quiero mostrar los amigos de PEDRO hago una consulta sacando TODOS los id_user2 buscando por id_user1 (PEDRO)

¿Seria así, no? :D

1 respuesta
grivcon

#1 en Bases de datos se estudia, si utilizas el sistemas Entidad Relacion, relacionas dos entidades (usuarios) y el nombre de la relación es Amistad, que genera otra tabla. A grandes rasgos se traduce en:

Tienes Usuarios como tabla 1 y Amigos, tabla 2

Cuando un usuario manda una amistad a otro. se crea una fila en Amigos, donde el campo1 es el que manda la amistad, campo2 el que la recibe. Otro campo sería Formalizado, que sería 0 (o false) hasta que el usuario que la recibe da a aceptar. Cuando acepta, cambias ese 0 a 1 (a true). Cuando quieras escribir una lista de amigos aceptados para usuario1:

query de Amigos donde campo1 o campo2 = usuario1 and formalizado = true.

Esta ultima linea tiene en cuenta amigos que ha aceptado el, y amigos que ha mandado el la invitación.

2 respuestas
RaymaN

#3 sí, pero no necesitas insertarlo dos veces.

1 respuesta
vincen

#5 Imagino que haciendo un solo INSERT a la hora de llamar seria como dice #4
Pero no se muy bien como hacer la query con "Entidad Relación"
Podeis ponerme el ejemplo de la query "query de Amigos donde campo1 o campo2 = usuario1 and formalizado = true " en php?

1 respuesta
grivcon

#6 no me acuerdo de la sintaxis exacta pero es algo tal que así.
myql_query("SELECT * FROM Amigos WHERE campo1 = '".$usuario1."' OR campo2 = '".$usuario1."' AND formalizado = '1'");

No creo que este bien del todo por fallos de sintaxis pero basicamente es eso.

DarkSoldier

#4 entre 2 entidades no, entre la misma, relacion reflexiva xD

Usuarios habituales

  • DarkSoldier
  • grivcon
  • vincen
  • RaymaN