Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Estructura de tabla para relaciones de amistad en sql

Estas en el tema de Estructura de tabla para relaciones de amistad en sql en el foro de Mysql en Foros del Web. Hasta ahorita me ha funcionado bien lo que hago, pero tiene muchas limitaciones. puedo agregar amigos, ver usuarios, ver amigos, ver las solicitudes de amistad ...
  #1 (permalink)  
Antiguo 08/04/2013, 16:09
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 2.031
Antigüedad: 11 años, 8 meses
Puntos: 52
Estructura de tabla para relaciones de amistad en sql

Hasta ahorita me ha funcionado bien lo que hago, pero tiene muchas limitaciones.
puedo agregar amigos, ver usuarios, ver amigos, ver las solicitudes de amistad etc.
pero quisiera saber que estructura es la mas recomendable para relaciones de amistad.

por ejemplo.
Tabla usuarios
id
nombre
otrodatos

ahora que falta?
alguna otra tabla o algunas otras tablas?

de antemano gracias
__________________
a veces creemos que es algo básico pero al profundizar nos damos cuenta que estábamos tocando solo la cola de la culebra
  #2 (permalink)  
Antiguo 09/04/2013, 01:43
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 5 meses
Puntos: 67
Respuesta: Estructura de tabla para relaciones de amistad en sql

No lo había pensado nunca pero podría solucionarse con una tabla, NO digo que sea lo mejor, digo lo que se me acaba de ocurrir.
Tabla "Relationships" (ese inglés jeje)
user_1 (Id de usuario)
user_2 (Id de usuario)
type (Valor entero)

Se rellenaría con los ids de usuario, según quien envía la solictud y en tipo indicarías el tipo de relación, por ejemplo:
El usuario 12, envía una solicitud al usuario 13. Podrías poner en el la tabla (12,13,1). Si la solicitud la envía el usuario 13 al 12 (13,12,1).
Si el segundo usuario acepta la solicitud (12,13,2).

Con eso podrías jugar, según las opciones que quieras dar, es un idea sólo, no tiene porque ser buena, ni la mejor :)
  #3 (permalink)  
Antiguo 09/04/2013, 13:56
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 2.031
Antigüedad: 11 años, 8 meses
Puntos: 52
Respuesta: Estructura de tabla para relaciones de amistad en sql

Cita:
Iniciado por zalito12 Ver Mensaje
No lo había pensado nunca pero podría solucionarse con una tabla, NO digo que sea lo mejor, digo lo que se me acaba de ocurrir.
Tabla "Relationships" (ese inglés jeje)
user_1 (Id de usuario)
user_2 (Id de usuario)
type (Valor entero)

Se rellenaría con los ids de usuario, según quien envía la solictud y en tipo indicarías el tipo de relación, por ejemplo:
El usuario 12, envía una solicitud al usuario 13. Podrías poner en el la tabla (12,13,1). Si la solicitud la envía el usuario 13 al 12 (13,12,1).
Si el segundo usuario acepta la solicitud (12,13,2).

Con eso podrías jugar, según las opciones que quieras dar, es un idea sólo, no tiene porque ser buena, ni la mejor :)

mm La cache de foros del web anda mal, por que si estoy escribiendo y me voy por un sandwich y tardo unos minutos cuando regreso y termino el escrito le doy enviar y me manda para iniciar sesión, y ya cuando la inicio el texto que había escrito ya no esta :S
no manches escribí como 2 hojas 2 veces, por que paso lo mismo
:S


volveré a escribir

que crees que yo tengo lo mismo

tabla usuarios
nombre
apellido
campos...


tabla amigos

usuario(Id de usuario)
amigo(Id de amigo)
solicitud(estado)

en vez de números en el campo solicitud uso "ENVIADA" Y "ACEPTADA"

ya hago todo normal todo bien perfecto pero quiero que a la hora de mostrar todos los usuarios aparezca el estado del usuario.
osea que aparezca

juan ' agregar amigos
pepe ' eliminar de amigos
francisco ' solicitud enviada
jimena ' agregar amigos


en vez de

juan ' agregar amigos
pepe ' agregar amigos
francisco ' agregar amigos
jimena ' agregar amigos

puedo controlar que no se agreguen los amigos repetidos pero quiero que indique a cada usuario que amigos tiene y en que estado.

ejemplo el facebook
bueno esta es mi consulta normal por ahora, me falta el filtro que haga aquello
talvez no solo deba hacer en sql si no en php.
mi consulta actual

Código MySQL:
Ver original
  1. select * from losusuarios where id<>".$_SESSION['id']."  limit 30;
__________________
a veces creemos que es algo básico pero al profundizar nos damos cuenta que estábamos tocando solo la cola de la culebra

Última edición por gnzsoloyo; 10/04/2013 a las 03:18
  #4 (permalink)  
Antiguo 10/04/2013, 01:18
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 5 meses
Puntos: 67
Respuesta: Estructura de tabla para relaciones de amistad en sql

Pues es tan fácil como comprobar la relacion entre dos personas. Juan y Pepe
Si en la tabla hay un registro para Juan y Pepe mostrarás "Amigo" o "solicitud enviada" dependiendo del número y si no hay registro moestrarás "Agregar"
__________________
Dicen que las personas piensan en su lengua materna, yo lo hago en PHP
  #5 (permalink)  
Antiguo 10/04/2013, 09:30
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 2.031
Antigüedad: 11 años, 8 meses
Puntos: 52
Respuesta: Estructura de tabla para relaciones de amistad en sql

Cita:
Iniciado por zalito12 Ver Mensaje
Pues es tan fácil como comprobar la relacion entre dos personas. Juan y Pepe
Si en la tabla hay un registro para Juan y Pepe mostrarás "Amigo" o "solicitud enviada" dependiendo del número y si no hay registro moestrarás "Agregar"
es un poco mas complicado de lo que parece..
son 2 tablas.
usuarios
y relaciones.

usuarios
id 1
id 2
id 3
id 4
id 5

relaciones
idusuario idamigo
1-2
2-1


imagina que solamente esta esa relacion.


son amigos
el 1 y el 2.
y a fuerzas agrego 2 registros cuando se hace una amistad. no se si se la forma correcta.
el caso es que necesito desplegar todos los usuarios
Código SQL:
Ver original
  1. SELECT * FROM usuarios INNER JOIN amigos ON usuarios WHERE  idamigo=idusuario AND idusuario <> $_SESSION['id'];
mas o menos así, pero ahora como hago para que en esa misma consulta verificar cual es la relacion entre ellos de que si ya son amigos o no son amigos y agregar "agregar amigos" "Eliminar de amigos" y "solicitud enviada"..
esa consulta no estoy seguro de que funcione de hecho probé varias así y nada..

por cierto, foros del web me manda un catcha a veces para responder, y cuando le doy enviar queda la pagina en blanco y debo regresar para poder reenviar, sera un problema de la pagina o de mi navegador.
bueno solo les notifico
__________________
a veces creemos que es algo básico pero al profundizar nos damos cuenta que estábamos tocando solo la cola de la culebra
  #6 (permalink)  
Antiguo 11/04/2013, 01:23
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 5 meses
Puntos: 67
Respuesta: Estructura de tabla para relaciones de amistad en sql

Por eso te hablaba de una tabla con campo tipo. No guardarías dos registros, sólo uno, por ejemplo, con el tipo 3 son amigos, ya puedes filtrar todos los amigos de forma fácil.
Si quisieras hacer esas comprobación de algún usuario, por ejemplo PEPE está registrado y quieres ver que tipo de relación tiene con JUAN.
Código SQL:
Ver original
  1. SELECT * FROM relaciones WHERE (user1 = PEPE AND user2 = JUAN) OR (user2 = PEPE AND user1 = JUAN);
- Si no devuelve registros, no tienen ninguna relación
- Si hay algún registro tienen una relación dependiendo del campo tipo, con eso ya juegas a tu gusto, amigos, solicitud, bloqueado, etc.

Lo del captcha puede ser por la red o algo, a mi no me lo pide.
__________________
Dicen que las personas piensan en su lengua materna, yo lo hago en PHP
  #7 (permalink)  
Antiguo 11/04/2013, 16:53
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 2.031
Antigüedad: 11 años, 8 meses
Puntos: 52
Respuesta: Estructura de tabla para relaciones de amistad en sql

Cita:
Iniciado por zalito12 Ver Mensaje
Por eso te hablaba de una tabla con campo tipo. No guardarías dos registros, sólo uno, por ejemplo, con el tipo 3 son amigos, ya puedes filtrar todos los amigos de forma fácil.
Si quisieras hacer esas comprobación de algún usuario, por ejemplo PEPE está registrado y quieres ver que tipo de relación tiene con JUAN.
Código SQL:
Ver original
  1. SELECT * FROM relaciones WHERE (user1 = PEPE AND user2 = JUAN) OR (user2 = PEPE AND user1 = JUAN);
- Si no devuelve registros, no tienen ninguna relación
- Si hay algún registro tienen una relación dependiendo del campo tipo, con eso ya juegas a tu gusto, amigos, solicitud, bloqueado, etc.

Lo del captcha puede ser por la red o algo, a mi no me lo pide.


de acuerdo a lo que veo, si entiendo, la pregunta es de donde se que el usuario amigo se llamara pepe o juan?
se supone que cuando recojo la lista no se los nombres.
entonces debio haber una consulta previa a esa donde obtuve los nombres. sin embargo la idea es solo hacer una consulta para que sea optimo.


lo que tu decias lo entendi mas o menos asi.
Código SQL:
Ver original
  1. SELECT * FROM amigos WHERE (amigos.idusuario=303 OR amigos.idamigo=303) ;

Bueno.
Creo que a fuerzas se tienen que insertar dos registros.

idusuario-idamigo
303-301
301-303


por eso uno se llama campo
idusuario y el otro idamigo




donde 303 es el id del usuario que esta haciendo la consulta a sus amistades.
entonces esto me regresa los registro de la tabla relaciones. en esa tabla solo se encuentran los campos
idprimary idamigo, idusuario, estadodesolicitud.

y me regresa

idusuario-idamigo
303-301
301-303
esos datos asi.
ahora yo lo que quiero es obtener los otros campos de cada amigo..
de la tabla usuarios, es alli donde estoy estancado.


n=totaldeamigos por usuario.
tenia pensado sacar las relaciones y luego solo guardar los ids de los amigos
y luego en un for hace n consultas para mostrar los datos de cada amigo
__________________
a veces creemos que es algo básico pero al profundizar nos damos cuenta que estábamos tocando solo la cola de la culebra

Última edición por minombreesmm; 11/04/2013 a las 17:14

Etiquetas: 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 05:09.